我正在使用带有RestAdapter的Ember Data和以下模型:
Pizzas.Pizza = DS.Model.extend({
name: DS.attr('string'),
orders: DS.hasMany('order', { async: true }),
});
Pizzas.Order = DS.Model.extend({
date: DS.attr('date'),
pizzas: DS.hasMany('pizza', { async: true }),
});
我创建并保存新订单的步骤如下:
var pizza1 = an existing pizza with id 1;
var pizza2 = an existing pizza with id 2;
var newOrder = this.store.createRecord('order');
newOrder.set('date', Date());
newOrder.get('pizzas').then(function(pizzas) {
pizzas.pushObject(pizza1);
pizzas.pushObject(pizza2);
newOrder.save();
});
这个很好用 - Ember Data 在
Order
模型上执行POST操作,其中包括在pizzas
关系字段中的披萨id。然而,我期望在保存后,Ember Data会自动将订单ID添加到2个披萨对象的orders
关系中,但事实并非如此。这会导致两个问题:
- 当我查询一个披萨的所有订单时,新订单不会出现(因为它从未添加到披萨的关系字段中)
- 当对披萨进行更改(例如名称更改)并保存披萨时,服务器上的新订单关系会丢失(因为它从未添加到披萨的关系字段中,并且PUT仅包括最后从服务器获取的订单ID)
我通过修改上面代码的最后一行解决了这个问题:
newOrder.save().then(function() {
pizza1.get('orders').then(function(orders) {
orders.pushObject(newOrder);
})
// same for pizza 2
} );
Ember数据是否需要手动在两端创建关系(就像我现在所做的那样),还是我缺少了什么?