Edy*_*rne 3 javascript ember.js ember-data
我有一条创建新记录的路线,如下所示:
App.ServicesNewRoute = Ember.Route.extend({
model : function() {
return this.store.createRecord('service');
},
setupController: function(controller, model) {
controller.set('model', model);
},
});
Run Code Online (Sandbox Code Playgroud)
然后我将该模型的属性绑定到路径的模板,使用{{input type="text" value=model.serviceId ... }}它很好,模型在填充表单时填充.
然后我保存记录:
App.ServicesNewController = Ember.ObjectController.extend({
actions : {
saveService : function() {
this.get('model').save(); // => POST to '/services'
}
}
});
Run Code Online (Sandbox Code Playgroud)
哪个也有效.
然后我再次单击保存按钮,现在save方法按预期执行PUT,因为模型有一个id设置(id:102):

但是当我在Dev Tools中查看PUT请求时,我发现id属性未被序列化:

结果,在后端创建了一个新实例,而不是更新现有实例.
请忽略serviceId属性,它只是一个string与记录ID无关的常规属性,应该只是命名id.
我不知道为什么id没有被序列化...我不能在模型上定义一个id属性,因为Ember Data不允许它,它是隐含的.所以我不知道我错过了什么......
任何帮助是极大的赞赏!
Ember-Data中的基本JSONSerializer在创建记录时仅包含有效负载中的id.请参阅DS.JSONAdapter.serialize docs.
RestAdapter为PUT更新而生成的URL包括路径中的ID.在你的情况下,我相信它会:PUT '/services/102'.
您可以从后端服务中的路径中提取它.或者您应该能够覆盖序列化程序的行为以添加如下所示的ID:
App.ServiceSerializer = DS.JSONSerializer.extend({
serialize: function(record, options) {
var json = this._super.apply(this, arguments); // Get default serialization
json.id = record.id; // tack on the id
return json;
}
});
Run Code Online (Sandbox Code Playgroud)
有关文档中序列化自定义的大量其他信息.
希望有所帮助!
| 归档时间: |
|
| 查看次数: |
4938 次 |
| 最近记录: |