我想计算票价的总结果。你可以在这里看到: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
}
];
我该如何正确地做到这一点?
答案 0 :(得分:1)
您需要创建一个功能来监视quantity
和fare.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