使用模型属性计算灰烬

时间:2014-11-13 16:27:59

标签: ember.js

我想计算票价的总结果。你可以在这里看到:http://emberjs.jsbin.com/yudofozoqu/1/

由价值数量组成:

{{input value=quantity}}

乘以可在选择选项中选择的特定票价:

{{view Em.Select prompt="test" contentBinding="controllers.fare.content" optionLabelPath="content.name" optionValuePath="content.id" selectionBinding="controllers.fare.selectedFare" }}

总结果必须与我在模型中设置的总值相对应:

{{input value=total}}

App.Invoice = DS.Model.extend({
  name        : DS.attr('string'),
  quantity    : DS.attr('string'),
  total       : DS.attr('string')
});

App.Invoice.FIXTURES = [
 {
   id: 1,
   quantity: null,
   total: null
 }
];

我该如何正确地做到这一点?

1 个答案:

答案 0 :(得分:1)

您需要创建一个功能来监视quantityfare.selectedFare属性中的更改,以便计算总数。例如:

// this should be added to the IndexController
updateTotal: function() {

  // get the reference to the values of fare and quantity
  var quantity = this.get('quantity'),
      fare = this.get('controllers.fare.selectedFare.id');

  // massage them to make sure your stuff is not gonna break
  if (isNaN(fare)) { fare = 0; }
  if (isNaN(quantity)) { quantity = 0; }

  // calculate
  var total = fare * quantity;

  // set the total
  this.set('total', total);

}.observes('quantity', 'controllers.fare.selectedFare')

确定。这可行,但考虑在保存记录(在服务器控制器中)时在后端进行总计算,并将total属性转换为计算属性,具有与上述代码相同的一般概念。根据你正在做的事情,如果它涉及浮点/小数/奇异计算,(我倾向于认为)你可以期望更准确的静态类型(通常在服务器上)而不是JavaScript