在Ember Data中,如何通过id设置关系字段,而不向服务器发送空值?

epggiuax  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(113)

我有一个订单模型

export default DS.Model.extend({
  account: DS.belongsTo('account', {async: true}),
  address: DS.belongsTo('address', {async: true}),
  orderItems: DS.hasMany('orderItem', {async: true}),
  orderStatus: DS.belongsTo('orderStatus', {async: true}),
  specialInstructions: DS.attr('string'),
  creationDate: DS.attr('date')
});

它具有订单状态,其型号为:

export default DS.Model.extend({
  value: DS.attr('string'),
  orders: DS.hasMany('order', {async: true})
});

在order/create route中,我使用model获取账户,然后使用afterModel在db中直接创建一个新订单。

var order = this.store.createRecord('order', {
  account: model,
  orderStatus: 1
});

return Ember.RSVP.hash({
  order: order.save().then(function() {
    self.set('order', order);
  }),
  products: this.store.findAll('product').then(function(result) {
    self.set('products', result);
  })
});

但看着POST向服务器Ember发送的是orderStatus:服务器的空值。
除此之外,我想稍后在saveOrder操作(在控制器上)中再次设置它。

order.set('orderStatus', 3);
order.save().then(function() {
    self.transitionToRoute('member.orders', order.get('account'));
});

我可以这样做吗?我也有组件想要发送动作来保存对象(看Ember 2.0),在那里设置id是理想的,因为我不想访问组件中的存储等。

dohp0rv5

dohp0rv51#

可以使用store.getReference('orderStatus', 3)获取对OrderStatus的引用,然后像处理模型一样对其进行设置:

const orderStatus = store.getReference('orderStatus', 3)
order.set('orderStatus', orderStatus)

我知道这是一个古老的问题,但由于我偶然发现它寻找答案,我想别人也会这样做!

相关问题