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