这是在Durandal应用程序中。我有一个名为Items的可观察数组,每个项目都有一些属性和一个ko.computed值linetotal。
self.items = ko.observableArray();
self.item = function(data) {
this.sku = ko.observable(data.sku);
this.description = ko.observable(data.description);
this.msrp = ko.observable(data.msrp)
this.sell_price = ko.observable(data.sell_price);
this.quantity = ko.observable(data.quantity);
this.tax = ko.observable(data.tax);
this.linetotal = ko.computed(function() {
return Number(this.sell_price()) * Number(this.quantity());
}, this);
}
self.activate = function () {
//make an empty item row
self.items.push(new self.item({
sku: "",
description: "",
msrp: "",
sell_price: "2.41",
quantity: "3",
tax: "",
}));
}
在页面激活时,我在行总计字段中得到预期值7.23:
<tbody data-bind="foreach: items">
<tr>
<td><input type="text" data-bind="attr: { value: $data.sku }"></td>
<td><input type="text" data-bind="attr: { value: $data.description }"></td>
<td><input type="text" data-bind="attr: { value: $data.msrp }"></td>
<td><input type="text" data-bind="attr: { value: $data.sell_price }"></td>
<td><input type="text" data-bind="attr: { value: $data.quantity }"></td>
<td><input type="text" data-bind="attr: { value: $data.tax }"></td>
<td data-bind="text: $data.linetotal"></td>
</tr>
</tbody>
但似乎计算函数未绑定到observable,因为更新quantity或sell_price字段不会更改计算值。我可以发布一个js小提琴,但它不会起作用,因为这是在Durandal应用程序中。
这是:https://jsfiddle.net/1zcfz1ax/
我接近这个问题了吗?
答案 0 :(得分:1)
使用value
绑定,而不是attr: { value: foo }
这是一个清理过的fiddle。
我已经取消了这个项目#34;&#34;在视图模型之外,因为它不需要在那里,删除了多余的$data.foo
绑定而只支持foo
,将值更改为常规数而不是字符串,所以你不要#39 ; t必须稍后将它们转换为数字。