2

我正在使用一个可观察的“零件”数组,其中包含一个可观察的“Vol”。我目前有每个部分的音量以及显示的总量。当应用程序启动时,总​​金额被正确添加。但是,当我更改零件的体积时,不会重新计算总量。

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/

4

1 回答 1

5

当您使用value: Vol绑定敲除时,不会将您的输入转换为整数,只是将用户输入的数据存储为字符串。

因此,您需要在计算总数之前将其解析为整数:

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

一个固定的小提琴

现在,因为您正在进行解析,所以您不应该忘记处理用户输入非数字输入的情况。

但是,您可以轻松编写自定义绑定处理程序来抽象解析。

或者您可以使用ko.extenders. 该文档在此处也有一个示例。

于 2012-12-06T20:40:40.293 回答