【问题标题】:Ember Data loading hasMany relation doesn't work in Ember App Kit (EAK)Ember 数据加载 hasMany 关系在 Ember App Kit (EAK) 中不起作用
【发布时间】:2014-05-21 21:00:15
【问题描述】:

我正在尝试在两个模型之间建立 hasMany 关系,并在 hasMany 和 hasOne 之间建立 hasOne(在当前版本的 Ember Data 中为 belongsTo)。

我正在使用 Ember Data 并制作了一个符合 Ember 约定的 RESTful API。所有的类都可以单独查询。

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

所以目标是获取Bookmark 并通过Termbinding 获取附加到它的Terms。我已经很高兴让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;

书签.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 用于我的书签应用程序。提前致谢。

【问题讨论】:

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


    【解决方案1】:

    明确指定你的倒数可能是明智的,即

    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 可以帮助我隔离问题并提供协作空间来调试和试验。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多