我正在使用Ember-Data beta 3.我的Ds.models类似于以下内容:
App.Item = DS.Model.extend({
itemName: DS.attr('string'),
strategy: DS.belongsTo('strat')
});
App.Strat = DS.Model.extend({
stratName: DS.attr('string'),
items: DS.hasMany('item',{async:true})
});
使用Ember-data的RESTAdapter,我可以使用服务器中的数据填充模型。但是当我试图将数据保存回服务器时,没有发送任何“App.Item”记录。我的服务器收到的JSON只包含“stratName”。我用“this.get('model')。save()”来触发发送。
我做错了什么?
答案 0 :(得分:2)
您是否有理由在模型之间使用异步关系?
如果将它们设置为{embedded:always},则可以轻松覆盖serializeHasMany函数以包含所有相关模型信息
serializeHasMany: function(record, json, relationship) {
var hasManyRecords, key;
key = relationship.key;
hasManyRecords = Ember.get(record, key);
if (hasManyRecords && relationship.options.embedded === "always") {
json[key] = [];
hasManyRecords.forEach(function(item, index) {
// use includeId: true if you want the id of each model on the hasMany relationship
json[key].push(item.serialize({ includeId: true }));
});
} else {
this._super(record, json, relationship);
}
},
答案 1 :(得分:0)
您没有做错任何事情,仅保存特定记录的保存。
但是,它应该是发送相关项目的ID,是不是发生了?
答案 2 :(得分:0)
你必须在适配器中覆盖serializeHasMany并将此适配器用于模型或应用程序,这是一个coffescript示例:
App.LMSSerializer = App.ApplicationSerializer.extend
serializeHasMany: (record, json, relationship) ->
key = relationship.key
jsonKey = Ember.String.singularize(key) + '_ids'
json[jsonKey] = []
record.get(key).forEach( (item) ->
json[jsonKey].push(item.get('id'))
)
return json