0

我有一个系统,我希望用户在其中向项目添加标志(主题标签)。这是我的模型:

Social.Item = DS.Model.extend({
  source: DS.belongsTo ('source'),
  url: DS.attr (),
  post_timestamp: DS.attr(),
  summary: DS.attr(),
  item_flags: DS.hasMany('item_flag', {async: true})
});
Social.Flag = DS.Model.extend({
  kind: DS.attr(),
  name: DS.attr(),
  item_flags: DS.hasMany('item_flag', {async: true})
});
Social.ItemFlag = DS.Model.extend({
  item: DS.belongsTo('item', {async: true}),
  user: DS.belongsTo('user', {async: true}),
  flag: DS.belongsTo('flag', {async: true}),
});

这是相关的车把代码:

{{#each item in site.sorted_items itemController="item"}}
  {{{item.summary}}}
  {{#each item_flag in item.item_flags}}{{item_flag.flag}}*FF*{{/each}}
{{/each}}

系统为每个项目输出几个FF标签——数据库中肯定有 item_flag 元素,我可以在我的 REST 端点上看到调用——系统正在从数据库中请求 item_flags。似乎belongsTo 关系另一侧的对象在此处不​​可用。我尝试扩展 ItemFlag 模型以包含以下代码:

flag_string: function() {
  return this.get('flag').then(function (data) {return data.get('name')});
}.property('flag')

但这只会引发 NPE - ItemFlag 模型上的 this.get('flag') 返回 null。似乎有人提到了适配器上定义的“嵌入:始终”,但是 (a) 那是从 pre-ember-data-beta 日开始的,并且 (b) 它没有帮助(而且,我的记录也没有嵌入)。

在一般情况下,我想做的是弄清楚如何查看模型的父模型,由数据库中的关系定义。

4

1 回答 1

0

事实证明,我与新的 ember-data 序列化程序的期望发生了冲突。我的 item_flag 序列化程序使用 json 响应,看起来{id: 1, flag_id:1, user_id:1}应该是{id: 1, flag:1, user:1}. 这导致(显然)在没有正确参数的情况下创建了 item_flag。

于 2013-09-11T21:33:47.127 回答