【问题标题】:Ember.js data associations not savingEmber.js 数据关联不保存
【发布时间】:2014-02-18 11:10:56
【问题描述】:

假设我有 2 个模型:

App.Address = DS.Model.extend({
   street: DS.attr('string'),
   person: DS.belongsTo('App.Person')
})

App.Person = DS.Model.extend({
  name: DS.attr('string'),
  addresses: DS.hasMany('App.Address')
})

现在我创建一个人

App.person = App.Person.createRecord({name: 'Bill'});
App.store.commit();

如果我尝试向这样的人添加地址

address = App.Address.createRecord({street: '123 Fake Street'});
App.person.get('addresses').pushObject(address);

并提交事务

App.store.commit();

新地址将被保存,但人员对象不会被识别为已更改; 即使 id 列表已从

{
  ...
  "addresses": []
}

{
  ...
  "addresses": [3]
}

有没有办法让 ember-data 知道我的 person 对象已更改并且它需要 被拯救?

编辑: Here 是一个说明问题的 jsfiddle。

【问题讨论】:

  • 我不介意错误出在哪里,因为控制台会显示预期结果...关于您的问题的任何最新状态?也许您在哪里使用旧的 ember-data 修订版?你还在遇到这个问题吗?

标签: ember.js ember-data


【解决方案1】:

到目前为止(ember-data 修订版 4)没有办法做到这一点。该对象仅保留在 belongsTo 一侧,因为它具有外键,因此如果您在关系的属于一侧设置值,它应该保留。下一个版本的 ember data 应该会解决这个问题。

【讨论】:

    【解决方案2】:

    我发现的解决方法是手动添加 id,例如:

    App.Address = DS.Model.extend({
       street: DS.attr('string'),
       personID: DS.attr('string'),
       person: DS.belongsTo('App.Person')
    })
    

    然后,当您发送数据时,设置 personId 字段,它会模仿 person 字段看起来应该发送的内容。

    【讨论】:

      【解决方案3】:

      如何为此编写自己的序列化程序,请参阅http://ember-website.thomasboyt.com/api/data/modules/data-serializer.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-24
        • 2018-01-15
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多