Javascript KnockoutJS和数组上的计算绑定

Javascript KnockoutJS和数组上的计算绑定,javascript,knockout.js,Javascript,Knockout.js,我目前正在尝试使用表单和KnockoutJS工具计算地板总空间。 所有这些都已经设置好了,并且正在计算总建筑面积 JSFIDLE: 访问者最多可以添加4个不同的空间(self.ruimtes),所有这些空间都需要经过计算才能得到总的楼层空间(this.totaalOppervlakte)。我已经为总楼层空间设置了一个计算函数,并在其中设置了一个循环,以通过所有“ruimtes”。当我运行代码并使用console.log时,它似乎没有在数组中循环,这是有意义的,因为数组在开始时是空的。但是,当我通

我目前正在尝试使用表单和KnockoutJS工具计算地板总空间。 所有这些都已经设置好了,并且正在计算总建筑面积

JSFIDLE:

访问者最多可以添加4个不同的空间(self.ruimtes),所有这些空间都需要经过计算才能得到总的楼层空间(this.totaalOppervlakte)。我已经为总楼层空间设置了一个计算函数,并在其中设置了一个循环,以通过所有“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不能按预期工作吗?

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

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

另外,这不应该是self.ruimtes吗?

您正试图使用jQuery的数组迭代器(
each
)在ObservalArray上进行迭代。observableArray不是数组,它包含一个数组。在尝试迭代之前,需要先获取数组值

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

另外,这不应该是self.ruimtes吗?

您在该代码中有几个问题。首先,计算出的totaalOppervlakte不在ViewModel的范围内,因此self并不等于您所认为的。第二,你对美元的使用。每个美元的使用似乎都不正常。我想你正在寻找更像这样的东西:

var total = 0;
$.each(self.ruimtes(), function(ruimte){
    total += ruimte.Oppervlakte();
});
主要区别在于:

  • self.ruimte似乎是一个拼写错误,应该是self.ruimtes

  • self.ruimtes是一个击倒可观察对象,必须展开->self.ruimtes()

  • 您缺少回调中的参数

  • 您可以在此处检查$的正确用法。每个$的用法如下:

    该代码中有几个问题。首先,计算出的totaalOppervlakte不在ViewModel的范围内,因此self并不等于您所认为的。第二,你对美元的使用。每个美元的使用似乎都不正常。我想你正在寻找更像这样的东西:

    var total = 0;
    $.each(self.ruimtes(), function(ruimte){
        total += ruimte.Oppervlakte();
    });
    
    主要区别在于:

  • self.ruimte似乎是一个拼写错误,应该是self.ruimtes

  • self.ruimtes是一个击倒可观察对象,必须展开->self.ruimtes()

  • 您缺少回调中的参数

  • 您可以在此处检查$的正确用法。每个$的用法如下:

    谢谢你指出这一点。我已经更新了代码和发帖中的信息。一旦我将backets()添加到行中,我会得到错误“uncaughttypeerror:self.ruimtes不是您在viewmodel之外定义的函数”
    totaalOppervlakte
    。感谢您指出这一点。我已经更新了代码和发帖中的信息。一旦我将backets()添加到行中,我会得到错误“Uncaught TypeError:self.ruimtes不是您在viewmodel之外定义的函数”
    totaalOppervlakte
    。很抱歉,请执行以下操作:total+=ruimte.Oppervlakte();它伤了我的眼睛!!将更改保持在最低限度,但如果您坚持。很抱歉,请执行以下操作:total+=ruimte.Oppervlakte();它伤了我的眼睛!!将更改保持在最低限度,但如果您坚持的话。