Ember.js 如何提交相关模型
我正在使用ember-pre4和ember data rev 11 型号:Ember.js 如何提交相关模型,ember.js,ember-data,Ember.js,Ember Data,我正在使用ember-pre4和ember data rev 11 型号: A = DS.Model.extend({ //some other fields b: DS.hasMany('B') }) B = DS.Model.extend({ //some other fields a: DS.hasOne('A') }) 在我的路由器中,我创建了模型A的一个实例,创建了模型B的一个实例,并将它们连接起来。它们都没有服务器端id。大概是这样的: var a
A = DS.Model.extend({
//some other fields
b: DS.hasMany('B')
})
B = DS.Model.extend({
//some other fields
a: DS.hasOne('A')
})
在我的路由器中,我创建了模型A的一个实例,创建了模型B的一个实例,并将它们连接起来。它们都没有服务器端id
。大概是这样的:
var a = A.createRecord();
b = B.createRecord();
b.set('a', a)
a.get('b').addObject(b)
当我想保存我制作的模型时:
a.transaction.commit()
我希望看到:
"{//some fields, b: [/url_to_b//]}" // we dont have b's id
"{//some fields } // we dont have a's id
b的请求数据为:
"{//some fields, b: [/url_to_b//]}" // we dont have b's id
"{//some fields } // we dont have a's id
解决这个问题的最佳方法是什么,new ember是否有适合我的默认解决方案,或者我应该手动完成所有工作 解决方案:
我在waitForParents函数中包装了createRecord函数:
waitForParents:function (record, callback, context) {
var observers = new Em.Set();
record.eachRelationship(function (name, meta) {
var relationship = get(record, name);
if (meta.kind === 'belongsTo' && relationship && get(relationship, 'isNew')) {
var observer = function () {
relationship.removeObserver('id', context, observer);
observers.remove(name);
finish();
};
relationship.addObserver('id', context, observer);
observers.add(name);
}
});
finish();
function finish() {
if (observers.length === 0) {
callback.call(context);
}
}
},
createRecord:function (store, type, record) {
this.waitForParents(record, function () {
// createRecord code here
}
}
你有什么解决办法吗?我也有同样的问题,我试过了,但是运气不好。您在waitForParent回调中做什么?您是否将其称为createrecord的.\u super()?我的问题是,只触发了一个请求(这是正确的),但在请求数据中,子url会自动嵌入,但不完整(缺少id,例如/api/v1/child/)。为了解决这个问题,我从序列化程序重写addBelongsTo函数。addBelongsTo:function(hash,record,key,relationship){var id=get(record,relationship.key+'.id');如果(!Em.isNone(id)){hash[key]=this.getItemUrl(relationship,id);},我认为这不能解决问题。原因是因为在我的例子中,正是这种关系导致了这个问题。因此,如果有什么问题,我应该重写序列化程序中的addHasMany方法。在提交之前,您如何添加关系?您是向hasmany关系添加对象还是为子模型设置belongsTo关系?addHasMany函数(hasmany关系的序列化函数)仅当您指定embedded:“always”时,才会将相关记录添加到父级,它可以包括id(如果存在)也可以不包括id(您可以检查它store.serialize函数)。很多东西取决于您的后端,我的意思是一些RESTAPI支持创建请求时的相关对象,即{static_字段:value,related_字段:{static_字段:value}}可以创建2个对象并在后端将它们关联起来。在我的示例中,我不支持嵌入:“始终”和使用“加载”。我明白了。在我的例子中,我嵌入了“始终”。它通过覆盖addHasMany对我起了作用。