我试图在两个模型之间建立一个hasMany关系,在hasMany和hasOne之间建立一个hasOne(在当前版本的Ember Data中是belongsTo)。
我正在使用Ember数据,并根据Ember的约定制作了一个RESTful API。所有的类都可以单独查询。
Bookmark = hasMany -> Termbinding
Termbinding = belongsTo -> Term
Term = belongsTo -> Termbinding
所以目标是获取一个Bookmark
,并通过Termbinding
获得附着在它上面的Terms
。我已经很高兴让Bookmark
到Termbinding
关系工作。我把贴在这里的所有问题都看了一遍,可惜都没用。
Router.js
var Router = Ember.Router.extend();
Router.map(function() {
this.resource('bookmarks', { path:'bookmarks'});
this.resource('bookmark', { path:'bookmarks/:bookmark_id' });
this.resource('termbindings', { path:'termbindings' });
this.resource('termbinding', { path:'termbindings/:termbinding_id' });
});
export default Router;
Bookmark.js
var Bookmark = DS.Model.extend({
url: DS.attr('string'),
description: DS.attr('string'),
visits: DS.attr('number'),
termbinding: DS.hasMany('termbinding')
});
export default Bookmark;
Termbinding.js
var Termbinding = DS.Model.extend({
bookmarkId: DS.attr('number'),
termId: DS.attr('number'),
termOrder: DS.attr('number'),
bookmarks: DS.belongsTo('bookmark')
});
export default Termbinding;
我希望有人能帮助我,因为这是阻止我使用烬为我的书签应用程序。
显式指定您的逆函数可能是明智的,即
var Termbinding = DS.Model.extend({
bookmarkId: DS.attr('number'),
termId: DS.attr('number'),
termOrder: DS.attr('number'),
bookmarks: DS.belongsTo('bookmark', { inverse: 'termbinding' })
});
export default Termbinding;
var Bookmark = DS.Model.extend({
url: DS.attr('string'),
description: DS.attr('string'),
visits: DS.attr('number'),
termbinding: DS.hasMany('termbinding', { inverse: 'bookmarks' })
});
export default Bookmark;
Ember Data将尝试为您映射逆,然而,它并非没有错误。可能是DS上的"书签"的复数形式。belongsTo关系脱离了它的自动逆映射。通常对于belongsTo,你会使用单数形式bookmark。相反,您的hasMany将是termbindings: DS.hasMany('termbinding')
另外,如果您能显示您调用模型的位置,那将非常感谢。通常,我发现在emberjs.jsbin.com上创建JSbin可以帮助我隔离问题,并且还提供了一个协作空间来调试和实验。