2013-12-18 54 views
0

我有这个fiddle的例子。我有一些配置文件和每小时的成本,我正在努力做出这笔总和,但它只能在第一时间发挥作用。如果我修改了一些值,总和不会更新。创建一个计算值来计算成本不起作用

我有这个功能来计算的总和:

self.valoracion = function() { 
    var total = 0; 
    ko.utils.arrayForEach(self.perfilesValorados(), function (item) { 
     var tarifa = ko.utils.arrayFirst(self.perfiles(), function(perfil) { 
      return perfil.perfil === item.perfil; 
     }); 
     total += parseInt(item.horas) * tarifa.tarifa; 
    }); 
    return total.toFixed(2); 
}; 

但是,如果我改变它,使其计算,我有一个错误,说perfilesValorados不是一个函数。

我怎么能使它工作?

回答

2

你需要2发生在你的代码:

  1. 更改valoracioncomputed function。为什么?因为您希望每当您的observable值发生变化时重新计算总和值。
  2. 为了步骤(1)工作,你计算valoracion持有observable属性您perfiles数组对象(和来这里的问题招)。

对于第2步,你已经定义Profile模型observable性能倒是对象perfiles数组,当你不使用它(我很想知道为什么?)。要解决这个问题,您可以简单地将init添加到您的ViewModel中,在该模型中您可以正确构建perfiles阵列。我希望你明白了。

DEMO

更新:

为您更新例如here它不工作,在插入新元素observableArray你有你的问题。根据Observable Arrays documentation
语法更方便。要调用KO的push方法,只写myObservableArray.push(...)

所以更新初始化函数代码中使用:

  1. self.perfiles.push而不是self.perfiles().push
  2. self.perfilesValorados.push而不是self.perfilesValorados().push

工作的版本您的更新示例here

+0

感谢您的帮助。我以json格式接收来自asp.net mvc动作的所有数据,并认为当我将值分配为perfiles(数据)时。perfiles),这个数组将被填充它们的值。我也做了另一个例子,但允许改变时间,但我有同样的问题。这是小提琴:jsfiddle.net/jfmiranda75/nsR9W – Specter

+0

@Specter检查我的更新,对不起,迟交回复 –

+0

再次感谢,现在它工作正常。 – Specter