Ember商店不会自动存储belongsTo数据

时间:2016-03-04 05:28:50

标签: ember.js ember-data ember-cli

我无法访问store中的belongsTo关系,方案是我当前的路由是/sales-orders,所以它显示了销售订单的网格,我有一个链接帮助item,当我点击某个项目时,它应该重定向到/sales-order/1

/routes/sales-order
 model(params) {
    return this.store.findRecord('salesOrder', params.salesOrder_Id).then(function(salesOrder) {
    return salesOrder;
});

},

在我的控制器中,我有这个init函数,可以添加和观察我的模型

/controllers/sales-order
    init: function (){
        this._super.apply(this, arguments);
        this.addObserver('model', this, 'modelChange');
    },

    modelChange: function(sender, key, value, rev){

        if(this.get('openModalForEditList') != true ){
        this.set('paymentTerm', this.store.peekAll('sales-order-payment-term').objectAt(0).get('description'));
        this.set('shippingMethod', this.store.peekAll('sales-order-shipping-method').objectAt(0).get('shippingMethodName'));
        this.set('salesOrderDetails', this.store.peekAll('sales-order-detail'));
        //this.get('openModalForEditList') == true ? this.set('openModal', true) : this.set('openModal', false);
    }

问题出现在modelChange函数中,尝试从服务器访问this.store.peekAll('sales-order-payment-term').objectAt(0).get('description')this.store.peekAll('sales-order-shipping-method').objectAt(0).get('shippingMethodName')数据时,最初将它存储到父进程(销售顺序) )模型已经加载到商店。 (它只会在完全转换后加载数据吗?)

那么如何让child / belongsTo数据与父进程一起加载到ember存储?

以下是我的模型定义。

//sales-order model (parent model)
export default DS.Model.extend({
  notes: DS.attr(),
  total: DS.attr(),
  salesOrderDetailRelationship: DS.hasMany('salesOrderDetail', {inverse: 'salesOrder'}),
  paymentTerm: DS.belongsTo('sales-order-payment-term'),
  shippingMethod: DS.belongsTo('sales-order-shipping-method')
});

//sales-order-payment-term
export default DS.Model.extend({  
description: DS.attr(),
salesOrder: DS.belongsTo('sales-order')});

//sales-order-shipping-method
export default DS.Model.extend({
    // shippingMethodId: DS.attr(),
    shippingMethodName: DS.attr(),  
    salesOrder: DS.belongsTo('sales-order')
});

1 个答案:

答案 0 :(得分:0)

默认情况下,Ember-Data中的所有关系都是异步的。因此,您必须首先将它们加载到商店中,然后才能查询它们。

尝试在路线中添加afterModel()挂钩:

 afterModel(model) {
  return Ember.RSVP.hash({
   orderDetail: model.get('salesOrderDetail'),
   paymentTerm: model.get('sales-order-payment-term'),
   shippingMethod: model.get('sales-order-shipping-method')
  })
 }

在您的modelChange函数中,最好使用this.get(model.xxxxx)代替this.store.peekAll('xxx')[0]