【问题标题】:How to save changes on associated models in Ember Data如何在 Ember Data 中保存关联模型的更改
【发布时间】:2023-03-23 11:15:01
【问题描述】:

我正在运行 Ember Data 1.0.0 和 Ember 1.3.0。

我有这些数据:

{
  "product": {
    "id": 185588,
    "name": "USB MIDI Adapter",
    "images":["imageid1", "imageid2"....]
  },
  "images": [
    {
      "id": "imageid1",
      "url": "google.com"
    },
    {
      "id": "imageid2",
      "url": "google.com2"
    }
  ]
}

还有这些模型:

App.Image = DS.Model.extend({
    url: DS.attr('string')
});

App.Product = DS.Model.extend({
    name: DS.attr('string'),
    images: DS.hasMany('Image') 
});

在我的模板中,我有一个编辑表单来更改相关图像的网址:

  <form {{action save on="submit"}}>
   {{input type="text" value=name}}

    {{#each images}}
    * {{input type="text" value=url}}<br>
    {{/each}}

   <button type="submit">Save</button>
   </form>

保存动作是:

save: function() {
  var product = this.modelFor('productEdit');
  product.save();
  this.transitionTo('product', product);
}

问题在于保存操作仅保存产品(PUT 产品),而不是对图像网址所做的更改。模型绑定工作正常,当我更改图像上的 url 时,gui 会按应有的方式更新,但 PUT 没有按应有的方式发送。

如何保存图像更改?

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    您需要在每条记录上调用 save,在 recordarray 上调用 save(这将迭代和保存),或者您可以覆盖序列化程序 (serializeIntoHash) 以将图像注入产品的保存中。

    records.forEach(function(record){
       if(record.get('isDirty')) record.save();
    });
    

    【讨论】:

    • 您能否提供其中一种解决方案的示例?我是 Ember(数据)的新手,不知道该怎么做 :)
    • 谢谢,但我不明白,我看不出任何关系,也没有什么关于保存功能的特别之处。你能解释一下吗?
    • 您所要做的就是获取记录数组并调用保存。在第二个例子中,我用颜色 hasMany 制作了一个狗对象,然后我点击保存并使用每种颜色的信息对服务器进行 3 次调用
    • 谢谢,product.get('images').save(); 工作得很好:) 它确实在所有图像上发送了一个 PUT,即使只有一个被更改,你知道是否可以只 PUT 实际更改的图像?
    • 是的,您可以遍历数组并获取属性 isDirty (bool) (record.get('isDirty')) 并根据该值决定是否保存
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 2013-11-22
    • 2015-10-23
    • 2013-01-02
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多