KnockoutJS和数组上的计算绑定

时间:2016-01-18 13:55:10

标签: javascript knockout.js

我目前正在尝试使用表格和KnockoutJS工具计算总地板空间。 所有这些都已经完成,它正在计算总占地面积。

JsFiddle:http://jsfiddle.net/rmfloris/zmc0nzrr/24/

访问者最多可以添加4个不同的空间(self.ruimtes),这些空间都需要计算才能达到总楼层间距(this.totaalOppervlakte)。我已经为总的floorscacing设置了一个计算函数,并在其中设置了一个循环来遍历所有'ruimtes'。当我运行代码并使用console.log时,它似乎没有循环遍历数组,这在启动时数组为空是有意义的。但是当我通过self.ruimtes.push()函数对数组进行更改时,仍然没有发生任何事情。

this.totaalOppervlakte = ko.computed(function() {
    var total = 0;
    $.each(self.ruimtes, function() {
        console.log('calculation')
        total = total + self.Oppervlakte();
    });
    return total.toFixed(2);
});

知道为什么ko.computed没有按预期工作?

2 个答案:

答案 0 :(得分:2)

您在该代码中遇到了几个问题。首先,计算出来的totaalOppervlakte超出了ViewModel的范围,因此self不等于你的想法。其次,你对$ .each的使用似乎已经过时了。我想你正在寻找更像这样的东西:

$_SESSION['Accepted']=0

主要区别是:

  1. self.ruimte似乎是一个错字,应该是self.ruimtes

  2. self.ruimtes是一个可以观察的淘汰赛,必须打开 - > self.ruimtes()

  3. 您缺少回调中的参数。

  4. 您可以在此处查看$ .each的正确用法: http://api.jquery.com/jquery.each/

答案 1 :(得分:0)

您正在尝试使用jQuery的数组迭代器(each)迭代observableArray。 observableArray不是数组,包含数组。在尝试迭代之前,您需要获取数组值。

$.each(self.ruimte(), function() {

另外,不应该是self.ruimtes