简体   繁体   English

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

[英]Ember Data loading hasMany relation doesn't work in Ember App Kit (EAK)

I'm trying to set up a hasMany relationship between two models and a hasOne (belongsTo in the current version of Ember Data) between the hasMany and hasOne. 我试图在两个模型之间建立一个hasMany关系,并在hasMany和hasOne之间建立一个hasOne(在当前版本的Ember Data中属于To)。

I'm working with Ember Data and have a made a RESTful API that works according to Ember's conventions. 我正在使用Ember Data,并制作了一个RESTful API,它可以按照Ember的约定工作。 All the classes can be queried individually. 所有的课程都可以单独查询。

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

So the goal is to fetch a Bookmark and get the Terms that are attached to it through the Termbinding . 因此我们的目标是获取一个Bookmark ,并得到Terms ,可通过连接到它Termbinding I would already be pretty happy to get the Bookmark to Termbinding relation working. 使“ BookmarkTermbinding关系正常运行,我已经很高兴了。 I went through all questions posted on here, sadly enough that didn't work. 我经历了这里发布的所有问题,可悲的是,这没有用。

Router.js 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 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 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;

I hope someone can help me because this is preventing me from using Ember for my bookmark application. 我希望有人可以帮助我,因为这使我无法将Ember用于书签应用程序。 Thanks in advance. 提前致谢。

It might be wise to explicitly specify your inverses, ie 显式指定您的逆数可能是明智的,即

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 will try to map inverses for you, however, it is not without faults. 灰烬数据将尝试为您映射逆,但是,并非并非没有错误。 It could possibly be that your pluralization of 'bookmarks' on a DS.belongsTo relationship is throwing off its automatic inverse mapping. 可能是您在DS.belongsTo关系上的“书签”的复数正在摆脱其自动逆映射。 Typically for belongsTo you would use the singular, 'bookmark'. 通常,对于belongsTo,您将使用单数“书签”。 Conversely, your hasMany would be termbindings: DS.hasMany('termbinding') 相反,您的hasMany将是termbindings: DS.hasMany('termbinding')

Also, if you could show where you're invoking the models that would be greatly appreciated. 另外,如果您可以显示在哪里调用模型,将不胜感激。 Typically I find that creating a JSbin at emberjs.jsbin.com helps me isolate the problem and also provides a collaborative space to debug and experiment. 通常,我发现在emberjs.jsbin.com上创建JSbin可以帮助我隔离问题,并且还提供了一个调试和试验的协作空间。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM