问题
我有一个shoppingcart
带有视图模型observableArray
的cartitems
视图模型。
当我更新视图模型的subtotal
属性时,我的cartitems
视图模型上的 computedObservableshoppingcart
需要更新,但我不知道如何让它触发更新
例子
function shoppingcart() {
var self = this;
self.cartItems = ko.observableArray([]);
self.grandTotal = ko.computed(function() {
var total = 0;
_.each(self.cartItems(), function (item) {
total += item.subTotal;
}
}
//inital load of the data
dataservice.loadCartItems(self.cartItems);
}
function cartItem() {
var self = this;
self.quantity = ko.observable(0);
self.price = 0.00;
self.subTotal = ko.computed(function() {
return self.price * self.quantity();
}
}
然后在我看来,我有类似的东西
<ul data-bind='foreach: cartItems'>
<!--other stuff here -->
<input type='text' data-bind="value: quantity, valueUpdate: 'afterkeydown'"/>
</ul>
<span data-bind='value: grandTotal'></span>
这是否可行,我只是在某个地方搞砸了,还是我需要添加其他东西来更新它?
现在,当文本框中的数量发生变化时,span 中的 grandTotal 不会更新。我假设这是因为这个子属性实际上并没有算作正在更改的 cartItems 集合。
在这里触发集合更新的好方法是什么?