在Ember 教程中,多对多关系被介绍为:
App.Post = DS.Model.extend({
tags: DS.hasMany('App.Tag')
});
App.Tag = DS.Model.extend({
posts: DS.hasMany('App.Post')
});
是否可以只放置其中一种DS.hasMany
关系。例如(让我知道我的代码是否有任何错误):
App.Post = DS.Model.extend({
postid: DS.attr('number'),
content: DS.attr('string'),
tags: DS.hasMany('App.Tag')
});
App.Tag = DS.Model.extend({
tagid: DS.attr('number'),
name: DS.attr('string')
});
这样就可以在这些夹具适配器设置中具有类似的 JSON:
App.Tag.FIXTURES = [{
tagid: 1111,
name: 'Ember.js',
}, {
tagid: 2222,
name: 'Javascript'
}];
App.Post.FIXTURES = [{
postid: 3000,
content: 'A JS Question'
tags: [2222]
}, {
postid: 4000,
content: 'An Ember.js Question',
tags: [1111, 2222]
}];
所以基本上多对多关系只是在父级中建立,这就是我没有包含posts: DS.hsaMany('App.Post')
在App.Tag
模型中的原因。
我在做什么好吗?如果是这样,我什么时候需要DS.hasMany
两种型号?如果不是,请同时更正 Fixture JSON。
如果适配器的类型有所不同,还请说明它们有何不同(相关问题)。
更新:由于intuitivepixel向我澄清了关系必须是多对多的,让我再试一次:
App.Post = DS.Model.extend({
postid: DS.attr('number'),
content: DS.attr('string'),
tags: DS.hasMany('App.Tag')
});
App.Tag = DS.Model.extend({
tagid: DS.attr('number'),
name: DS.attr('string'),
posts: DS.hasMany('App.Post')
});
夹具适配器设置可以像这样,关系仅在帖子中定义吗?
App.Tag.FIXTURES = [{
tagid: 1111,
name: 'Ember.js',
}, {
tagid: 2222,
name: 'Javascript'
}];
App.Post.FIXTURES = [{
postid: 3000,
content: 'A JS Question'
tags: [2222]
}, {
postid: 4000,
content: 'An Ember.js Question',
tags: [1111, 2222]
}];
还是必须像这样,在两者中都定义了关系。如果是这样,信息不是多余的吗?冗余是可怕的。:(
App.Tag.FIXTURES = [{
tagid: 1111,
name: 'Ember.js',
posts: [4000]
}, {
tagid: 2222,
name: 'Javascript',
posts: [3000, 4000]
}];
App.Post.FIXTURES = [{
postid: 3000,
content: 'A JS Question'
tags: [2222]
}, {
postid: 4000,
content: 'An Ember.js Question',
tags: [1111, 2222]
}];