Ember数据加载有很多关系在Ember App Kit(EAK)中不起作用

时间:2014-05-21 21:00:15

标签: ember.js ember-data ember-app-kit

我试图在hasMany和hasOne之间设置两个模型之间的hasMany关系和hasOne(当前版本的Ember Data中的belongsTo)。

我正在使用Ember Data,并根据Ember的惯例制作了一个RESTful API。所有课程都可以单独查询。

Bookmark    = hasMany   -> Termbinding
Termbinding = belongsTo -> Term
Term        = belongsTo -> Termbinding

因此,目标是获取Bookmark并获取通过Terms附加到其中的Termbinding。我已经很高兴让BookmarkTermbinding关系正常工作了。我仔细阅读了这里发布的所有问题,遗憾的是它没有用。

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;

我希望有人可以帮助我,因为这阻止我使用Ember作为我的书签应用程序。提前谢谢。

1 个答案:

答案 0 :(得分:0)

明确指定你的反转可能是明智的,即

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,您将使用单数,'书签'。相反,您的hasMany将为termbindings: DS.hasMany('termbinding')

此外,如果您可以显示您在哪里调用非常感谢的模型。通常我发现在emberjs.jsbin.com上创建一个JSbin可以帮助我隔离问题,并提供调试和实验的协作空间。