這是你想要的嗎? http://jsfiddle.net/bd0ktx5r/9/
我改變了一堆東西,因爲一開始我找不到錯誤,但是當我打開控制檯時,我意識到有很多語法錯誤等等。
我改變的是價格的輸入域的主要事情:我束縛對可觀察到的我加入到視圖模型讓你可以計算到它的變化。爲此,必須將價格觀察值傳遞給Product的構造函數。
我還清理你的代碼有點希望,使其更具可讀性鹿角更容易理解。
的問題是,一個ko.computed只響應在它使用的觀測(依賴)的變化。由於您使用jQuery從輸入字段獲取值,因此ko.computed無法知道價格何時發生變化。避免這些錯誤的最好方法是始終使用knockout,而不是將其與jQuery混合以獲取或設置值。代碼
有趣的位:
var Product = function (product, priceObservable)
{
var self = this;
// omitted code
self.Total = ko.computed(function() {
// Here I use the observable passed into the function
return priceObservable() === 0 ? 0 : (priceObservable() * self.Quatity()).toFixed(2);
});
};
var ProductModel = function (json) {
var self = this;
self.price = ko.observable(3000); // 3000 can be any initial value
self.products = ko.observableArray(json.map(function (item) {
return new Product(item, self.price);
}));
};
var productViewModel = new ProductModel(json);
ko.applyBindings(productViewModel);
<input type="text" data-bind="value: price, valueUpdate: 'afterkeydown'" />
我想它會更好,如果你把價格作爲一個可觀察你的視圖模型,並從它的價值。 – 2014-09-05 06:04:07
我剛剛修復的jsfiddle演示,你可以再次嘗試,我想價格是一個文本輸入,當它改變,所有的總規模將再次計算 – 2014-09-05 06:11:16
你可以在這裏嘗試一下:http://jsfiddle.net/bd0ktx5r/5/ – 2014-09-05 06:15:00