Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 如何在余烬数据中保存关联模型的更改_Ember.js_Ember Data - Fatal编程技术网

Ember.js 如何在余烬数据中保存关联模型的更改

Ember.js 如何在余烬数据中保存关联模型的更改,ember.js,ember-data,Ember.js,Ember Data,我正在用Ember 1.3.0运行Ember Data 1.0.0 我有以下数据: { "product": { "id": 185588, "name": "USB MIDI Adapter", "images":["imageid1", "imageid2"....] }, "images": [ { "id": "imageid1", "url": "google.com" }, { "id":

我正在用Ember 1.3.0运行Ember Data 1.0.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') 
});
在我的模板中,我有一个编辑表单来更改关联图像上的url:

  <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操作只保存产品(PUT product),而不保存对图像URL所做的更改。模型绑定工作得很好,当我更改图像上的url时,gui会按应有的方式更新,但PUT不会按应有的方式发送


如何保存图像更改?

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

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

你能为其中一个解决方案提供一个例子吗?我对Ember(数据)不太熟悉,不知道该怎么做:)谢谢你,但我不明白,我看不到任何关系,save函数也没有什么特别之处。你能解释一下吗?你所要做的就是抓取记录数组并调用save。在第二个示例中,我创建了一个颜色为hasMany的dog对象,然后点击save,并使用每种颜色的infoThank,
product.get('images').save()对服务器进行了3次调用工作正常:)即使只有一个图像被更改,它也会对所有图像发送一个PUT,您知道是否可以只放置实际更改的图像吗?是的,您可以迭代数组并获取属性isDirty(bool)(
record.get('isDirty')
)并根据该值决定是否保存
records.forEach(function(record){
   if(record.get('isDirty')) record.save();
});