knockoutjs MVC 4计算值

时间:2013-03-04 16:47:49

标签: knockout.js knockout-mapping-plugin knockout-2.0 knockout-mvc

我有以下viewModel

        var viewModel = new myViewModel([{
            Name: "Name",
            price: 32,
            tax: 22,
        }, {
            Name: "Name",
            price: 32,
            tax: 22,
        }]);

我有一个数据绑定到

       <tbody data-bind='foreach: personInfo'>

并输入:

        <td>
        <input class='required' data-bind='value: Name'/>
        </td>
        <td>
        <input class='required' data-bind='value: Price'/>
        </td>
        <td>
        <input class='required' data-bind='value: Tax'/>
        </td>

我希望获得价格的计算值,然后获得税,但是我没有成功。 :(

        self.totalSurcharge = ko.computed(function () {
        var total = 0;
        for (var i = 0; self.PersonInfo().length; i++)
        total += self.PersonInfo[i].price;
        return total;
        });

任何想法?

更新:

类似这样的事:http://jsfiddle.net/hamsaya/9XNDH/1/

由于

3 个答案:

答案 0 :(得分:2)

有趣的是他们必须更新网站:

这是答案。

    self.totalSurcharge = ko.computed(function () {
    var total = 0;
    for (var i = 0; i < gifts.length; i++)
    total =total+ gifts[i].price;
    return total;
    });  

答案 1 :(得分:1)

根据文档,在使用索引器从中访问数据之前,您需要使用parantheses来访问KO包装的observable数组:

http://knockoutjs.com/documentation/observableArrays.html

尝试替换

self.PersonInfo[i].price

self.PersonInfo()[i].price

答案 2 :(得分:1)

我已经测试了以下代码,该代码工作正常,

修改你的html如下:

 <tr>
     <td> Total of price here</td>
     <td data-bind="text:totalPrice"></td>
 </tr> 

在脚本中添加以下Computed Observable以计算总价:

self.totalPrice = ko.computed({
    read: function() {
    var totalAmount = null;
    for(var i=0 , j=self.gifts().length ; i < j ; i++ )
    {
         totalAmount =Number(totalAmount)+ Number(self.gifts()[i].price);
    }
    if(totalAmount == 0){
        totalAmount = '0.00'
        }
    return totalAmount;
}
});