2

我正在處理包含「Vol」觀察值的「Parts」的可觀察數組。我現在有每個部分的數量以及顯示的總金額。當應用程序啓動時,總​​金額被正確添加。但是,當我更改零件的體積時,總量不會重新計算。計算出的Knockoutjs在更新後不會重新計算

HTML:

<ul> 
    <li data-bind="foreach: Parts"> 
     <input data-bind="value: Vol" /> 
<br/> 
    </li> 
</ul> 

<br/> 
<br/> 
<span data-bind="text: fullVol "></span> 

的Javascript:

function Part (data) { 

     var self = this; 
     self.Vol= ko.observable(data.Vol); 

    } 


    function AppViewModel() { 
     var self = this; 


     self.Parts = ko.observableArray([new Part({"Vol": 1}), new Part({"Vol":2}), new Part({"Vol":3})]); 
     self.fullVol = ko.computed(function() { 
      var total = 0; 
      $.each(self.Parts(), function() { total += (this.Vol()) }) 
      return total; 
     }); 
    } 


ko.applyBindings(new AppViewModel()); 

這裏是我的jsfiddle:http://jsfiddle.net/jwinstonaspen/Zmkew/6/

回答

5

當您使用value: Vol綁定淘汰賽不會將您的輸入整數只是存儲用戶以字符串形式輸入數據。

所以,你需要的總計算之前將其解析爲整:

$.each(self.Parts(), function() { total += (parseInt(this.Vol())) }) 

固定fiddle

現在,因爲您正在進行解析,您應該不會忘記處理用戶輸入非數字輸入的情況。

但是,您可以輕鬆地編寫一個custom binding handler,它將摘要解析出來。可以使用ko.extenders。該文檔也有一個例子here