2013-12-17 29 views
2

我正在使用Ember 1.3.0运行Ember Data 1.0.0。如何在Ember数据中保存关联模型中的更改

我有这样的数据:

{ 
    "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进行的更改。模型绑定工作正常,当我更改图像上的url时,gui会更新,但应该不会发送PUT。

如何保存图像更改?

回答

2

您可能需要在每条记录上调用保存,调用保存在记录阵列上(这将迭代并保存),或者您可以覆盖序列化器(serializeIntoHash)以将图像插入产品保存。

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

你能否提供一个解决方案的例子?我是新来的Ember(数据),不知道该怎么做:) – Christoffer

+0

http://emberjs.jsbin.com/OxIDiVU/42/edit – Kingpin2k

+0

谢谢,但我不明白,我看到没有关系,没有任何关系关于保存功能的特别之处。你能解释一下吗? – Christoffer