2016-03-04 59 views
0

我无法访问商店属于关联关系,该情况是我目前的路线是/sales-orders,所以它显示的销售订单一格,我有一个链接 - 以帮手每个项目,当我点击一个项目应该重定向到/sales-order/1灰烬商店不自动存储属于关联数据

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

},

在我的控制器我有这个初始化函数添加和观测到我的模型

/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')数据最初不其存储到余烬店而父(销售订单)的模型已经被加载到店里来。 (只负载的全面转型后的数据我猜?)

因此,如何与父母余烬商店使孩子/属于关联的数据负载一起?

下面是我的模型定义。

//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') 
}); 

回答

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]

+0

我已经尝试过这种方法,但仍然在我的情况下不能正常工作。如果一个事件,我可以调用,当过渡成功,然后在该函数执行peekAll()?那可能吗? – user3197077