2017-04-19 6 views
0

저장에 두 배로 :엠버 계산 된 건물은 hasMany의 관계에 업데이트되지 나는 두 가지 모델의 다른 hasMany의 관계와 하나가

선적 :

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    pickup_address: DS.belongsTo('address', { inverse: null }), 
    delivery_address: DS.belongsTo('address', { inverse: null }), 
    shipment_lines: DS.hasMany('shipment-line', { inverse: null }), 
    shipmentPrice: Ember.computed('[email protected]_price', function() { 
    let price = 0; 
    this.get('shipment_lines').forEach(function(shipment_line) { 
     price += Number(shipment_line.get('package_price')); 
    }); 
    return price; 
    }), 
}); 

그리고 선적 라인 모델 :

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    description: DS.attr('string'), 
    package_weight: DS.attr('number'), 
    package_length: DS.attr('number'), 
    package_width: DS.attr('number'), 
    package_height: DS.attr('number'), 
    package_price: DS.attr('number'), 
}); 

컨트롤러에서 발송물에 새 발송물을 추가 할 때 API에서 패키지 가격을 가져 와서 배송 라인에 추가합니다 :

,
addShipmentLine(shipmentLine) { 
    // Get price for shipment line 
    this.getShipmentLinePrice(shipmentLine); 

    // Add shipment line to shipment 
    let shipment = this.get('shipment'); 
    shipment.get('shipment_lines').addObject(shipmentLine); 
}, 

getShipmentLinePrice 기능 (간체) : 나는 템플릿의 shipmentPrice를 인쇄하려고하면

getShipmentLinePrice(shipmentLine) { 
    ... 
    // Get weight and type 
    let weight = shipmentLine.get('package_weight'); 
    let length = shipmentLine.get('package_length'); 
    let height = shipmentLine.get('package_height'); 
    let width = shipmentLine.get('package_width'); 

    // Fetch price from API 
    this.get('price').getPackagePrice(weight, length, height, width).then(
     (price) => { 
      shipmentLine.set('package_price', price['price']); 
     } 
    ); 
} 

그리고 마지막으로,이 업데이트되지 않습니다. 서버에서 가격이 반환되고 shipment_linepackage_price이 설정되어 있어도 마찬가지입니다.

또한 배송비를 shipment.save();으로 저장하고 경로가 표시 페이지로 리디렉션되면 페이지를 새로 고침 할 때까지 가격이 두 배가됩니다. 페이지 새로 고침 후 모든 항목이 올바르게 표시됩니다.

첫 번째 질문은 새 발송물 오브젝트를 추가 할 때 shipmentPrice가 업데이트되도록 배송 물품을 계산하려면 어떻게해야합니까? 아니면 불가능한가요?

두 번째 질문은 저장 한 후에 가격이 왜 두 배가 되는가입니다.

답변

0

나는 마지막으로이 일을 알아 냈다. 글쎄, 적어도 나는 그것의 주위에 방법을 발견했다. 내가 서버 응 답을 추측

freight_order.save().then(
    (new_freight_order) => { 
     shipment.set('shipmentPrice', 0); 
     this.transitionToRoute('shipments.show', new_freight_order.id); 
    } 
); 

어떤 이유로 계산 된 값에 추가되었다 : 모델을 저장 한 후, 나는 수동으로 shipmentPrice0에 재설정.

0

봅니다 :

shipmentPrice: Ember.computed('shipment_lines.[]', function() { 
    let price = 0; 
    this.get('shipment_lines').forEach(function(shipment_line) { 
     price += Number(shipment_line.get('package_price')); 
    }); 
    return price; 
}), 
+0

늦게 답변을 드려 죄송합니다. 시험해 볼 기회가 생겨서 같은 결과를 얻었습니다. – pusle