問題
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>
これは機能すると思われますが、どこかを台無しにしただけですか、それともこれを更新するには何か他のものを追加する必要がありますか?
現在、テキスト ボックス内の数量が変更されても、スパン内の grandTotal は更新されません。これは、この子プロパティが実際には、cartItems コレクションが変更されたものとしてカウントされないためだと思います。
ここでコレクションの更新をトリガーする良い方法は何ですか?