@@ -10,15 +10,15 @@ To declare a one-to-one relationship between two models, use
1010import Model , { belongsTo } from ' @ember-data/model' ;
1111
1212export default class UserModel extends Model {
13- @belongsTo (' profile' ) profile;
13+ @belongsTo (' profile' , { async : true , inverse : ' user ' } ) profile;
1414}
1515```
1616
1717``` javascript {data-filename=app/models/profile.js}
1818import Model , { belongsTo } from ' @ember-data/model' ;
1919
2020export default class ProfileModel extends Model {
21- @belongsTo (' user' ) user;
21+ @belongsTo (' user' , { async : true , inverse : ' profile ' } ) user;
2222}
2323```
2424
@@ -31,15 +31,15 @@ To declare a one-to-many relationship between two models, use
3131import Model , { hasMany } from ' @ember-data/model' ;
3232
3333export default class BlogPostModel extends Model {
34- @hasMany (' comment' ) comments;
34+ @hasMany (' comment' , { async : true , inverse : ' blogPost ' } ) comments;
3535}
3636```
3737
3838``` javascript {data-filename=app/models/comment.js}
3939import Model , { belongsTo } from ' @ember-data/model' ;
4040
4141export default class CommentModel extends Model {
42- @belongsTo (' blog-post' ) blogPost;
42+ @belongsTo (' blog-post' , { async : true , inverse : ' comments ' } ) blogPost;
4343}
4444```
4545
@@ -52,68 +52,53 @@ To declare a many-to-many relationship between two models, use
5252import Model , { hasMany } from ' @ember-data/model' ;
5353
5454export default class BlogPostModel extends Model {
55- @hasMany (' tag' ) tags;
55+ @hasMany (' tag' , { async : true , inverse : ' blogPosts ' } ) tags;
5656}
5757```
5858
5959``` javascript {data-filename=app/models/tag.js}
6060import Model , { hasMany } from ' @ember-data/model' ;
6161
6262export default class TagModel extends Model {
63- @hasMany (' blog-post' ) blogPosts;
63+ @hasMany (' blog-post' , { async : true , inverse : ' tags ' } ) blogPosts;
6464}
6565```
6666
67- ### Explicit Inverses
67+ ### No Inverse Relations
6868
69- EmberData will do its best to discover which relationships map to one
70- another. In the one-to-many code above, for example, EmberData can figure out that
71- changing the ` comments ` relationship should update the ` blogPost `
72- relationship on the inverse because ` blogPost ` is the only relationship to
73- that model.
74-
75- However, sometimes you may have multiple ` belongsTo ` /` hasMany ` s for
76- the same type. You can specify which property on the related model is
77- the inverse using ` belongsTo ` or ` hasMany ` 's ` inverse `
78- option. Relationships without an inverse can be indicated as such by
79- including ` { inverse: null } ` .
69+ If an inverse relationship exists and you wish changes on one side
70+ to reflect onto the other side, use the inverse key.
71+ If you wish to not have changes reflected or
72+ no inverse relationship exists, specify ` {inverse: null } ` .
8073
8174``` javascript {data-filename=app/models/comment.js}
8275import Model , { belongsTo } from ' @ember-data/model' ;
8376
8477export default class CommentModel extends Model {
85- @belongsTo (' blog-post' , { inverse: null }) onePost;
86- @belongsTo (' blog-post' ) twoPost;
87- @belongsTo (' blog-post' ) redPost;
88- @belongsTo (' blog-post' ) bluePost;
78+ @belongsTo (' blog-post' , { async: true , inverse: null }) blogPost;
8979}
9080```
9181
9282``` javascript {data-filename=app/models/blog-post.js}
9383import Model , { hasMany } from ' @ember-data/model' ;
9484
9585export default class BlogPostModel extends Model {
96- @hasMany (' comment' , {
97- inverse: ' redPost'
98- })
99- comments;
10086}
10187```
10288
10389### Reflexive Relations
10490
105- When you want to define a reflexive relation (a model that has a relationship to
106- itself), you must explicitly define the inverse relationship. If there
107- is no inverse relationship then you can set the inverse to ` null ` .
91+ If you want to define a reflexive relation (a model that has a relationship to
92+ itself), you can do it via specifying ` inverse ` .
10893
10994Here's an example of a one-to-many reflexive relationship:
11095
11196``` javascript {data-filename=app/models/folder.js}
11297import Model , { belongsTo , hasMany } from ' @ember-data/model' ;
11398
11499export default class FolderModel extends Model {
115- @hasMany (' folder' , { inverse: ' parent' }) children;
116- @belongsTo (' folder' , { inverse: ' children' }) parent;
100+ @hasMany (' folder' , { async : true , inverse: ' parent' }) children;
101+ @belongsTo (' folder' , { async : true , inverse: ' children' }) parent;
117102}
118103```
119104
@@ -124,7 +109,7 @@ import Model, { attr, belongsTo } from '@ember-data/model';
124109
125110export default class UserModel extends Model {
126111 @attr (' string' ) name;
127- @belongsTo (' user' , { inverse: ' bestFriend' }) bestFriend;
112+ @belongsTo (' user' , { async : true , inverse: ' bestFriend' }) bestFriend;
128113}
129114```
130115
@@ -134,7 +119,7 @@ You can also define a reflexive relationship that doesn't have an inverse:
134119import Model , { belongsTo } from ' @ember-data/model' ;
135120
136121export default class FolderModel extends Model {
137- @belongsTo (' folder' , { inverse: null }) parent;
122+ @belongsTo (' folder' , { async : true , inverse: null }) parent;
138123}
139124```
140125
@@ -156,15 +141,15 @@ First, let's look at the model definitions:
156141import Model , { hasMany } from ' @ember-data/model' ;
157142
158143export default class UserModel extends Model {
159- @hasMany (' payment-method' , { polymorphic: true }) paymentMethods;
144+ @hasMany (' payment-method' , { async : true , inverse : ' user ' , polymorphic: true }) paymentMethods;
160145}
161146```
162147
163148``` javascript {data-filename=app/models/payment-method.js}
164149import Model , { belongsTo } from ' @ember-data/model' ;
165150
166151export default class PaymentMethodModel extends Model {
167- @belongsTo (' user' , { inverse: ' paymentMethods' }) user;
152+ @belongsTo (' user' , { async : true , inverse: ' paymentMethods' }) user;
168153}
169154```
170155
@@ -277,15 +262,15 @@ Let's assume that we have a `blog-post` and a `comment` model. A single blog pos
277262import Model , { hasMany } from ' @ember-data/model' ;
278263
279264export default class BlogPostModel extends Model {
280- @hasMany (' comment' ) comments;
265+ @hasMany (' comment' , { async : true , inverse : ' blogPost ' } ) comments;
281266}
282267```
283268
284269``` javascript {data-filename=app/models/comment.js}
285270import Model , { belongsTo } from ' @ember-data/model' ;
286271
287272export default class CommentModel extends Model {
288- @belongsTo (' blog-post' ) blogPost;
273+ @belongsTo (' blog-post' , { async : true , inverse : ' comments ' } ) blogPost;
289274}
290275```
291276
0 commit comments