ember.js - Ember 应用程序不会使用 ActiveModelAdapter 从 has_many 关系加载数据

标签 ember.js ember-data

当存储为 FixtureAdapter 时,此应用程序工作正常,但当存储为 ActiveModelAdapter 时,不会加载 has_many 关系。

路线是这样的:

App.IndexRoute = Ember.Route.extend({
  model: function(){
    return this.store.find('post', 1 )
  }
}); 

模型是这样的:

App.Post =  DS.Model.extend({
  name: DS.attr('string'),
  description: DS.attr('string'),
  comments: DS.hasMany('comments', {embedded: 'always'})
});

App.Comment =  DS.Model.extend({
  text: DS.attr('string'),
  post: DS.belongsTo('post')
});

Handlebars 模板要求:

{{name}}
{{#each comments}}
   {{text}}
{{/each}}

名称出现,注释不出现。 在 ember 开发者控制台中,评论根本没有被加载。

服务器似乎正确地提供了序列化内容(据我所知)。它看起来像这样:

{"post":{"id":1,"name":"Title","description":"Lorem Ipsum","comments":[{"id":1, "text": "commentary here"}]}}

有谁知道为什么这不起作用以及如何解决它?我已经为此苦苦挣扎了几个小时,但无法弄清楚为什么它不起作用。非常感谢您提供的任何见解。

我将其用作 Rails 项目的一部分,这些是相关的 gem:

gem 'ember-rails'
gem 'ember-source', '1.3.0'
gem 'ember-data-source', '~> 1.0.0.beta.6'
gem "active_model_serializers"

最佳答案

您需要为每个覆盖模型指定一个自定义适配器并混合嵌入的记录 Mixin:

App.PostSerializer = DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin, {
    attrs: {
        comments: {embedded: 'always'}
    }
});

请参阅 Ember-Data 源代码中的注释以获取更多信息。

关于ember.js - Ember 应用程序不会使用 ActiveModelAdapter 从 has_many 关系加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21533828/

相关文章:

javascript - 如何在离开页面时触发 ember.js 操作?

ember.js - 如何突出显示选定的地址?

Ember.js 将现有记录克隆到存储中

css - 在 Ember 中动态更改 CSS 类

javascript - 尝试在状态 root.loaded.updated.inFlight 中处理事件 `willCommit`

javascript - 将复选框绑定(bind)到 Ember 2+ 中一个数组的元素

ember.js - 查找路由和 Controller 的查询概念

javascript - Ember.JS 和 ember-data 在使用路由器时抛出神秘的错误消息

ember.js - 使用 Ember.js 和 Ember.Router 将我的 application.handlebars 分解成单独的模板

unit-testing - 测试 ember 应用程序时去抖函数调用的错误