2014-06-06 129 views
1

我想将计算值添加到我的viewModel对象。我使用foreach来创建一个行表。我无法绕过这个计算的功能。淘汰赛foreach计算值

我正在尝试这样做。

viewModel = 
{ 
    objectName: ko.observable([ 
     { value: "", triggerValue: "0"}, 
     { value: "", triggerValue: "1"}, 
     { value: "", triggerValue: "1"} 
    ]), 
}; 

viewModel.objectName().value= ko.computed(function() { 
     return this.objectName().triggerValue= "0" ? "Apple" : "Microsoft"; 
    }, this); 

我想视图模型对象名输出看起来像

{value: "Apple", triggerValue: "0"}, 
{value: "Microsoft", triggerValue: "1"}, 
{value: "Microsoft", triggerValue: "1"} 

感谢。 KDK

回答

0

几次失误回事

  1. 您使用的是可观察的,而不是observableArray,技术上可观察可以存储数组,但你最好使用observableArray
  2. 你正试图把一个计算为objectName()。值,但对象名称假设是一个数组,所以它不会有一个值,它理想的是像这个objectName()[1] .value。
  3. 这不是如何分配属性,ko.computed不是函数的替代,计算是为了监视现有的观测值,并且当在一个监测的观测值中进行改变时重新计算。

我会做这样的事情。

viewModel = 
{ 
    objectName: ko.observable([ 
    { value: setType(0), triggerValue: "0"}, 
    { value: setType(1), triggerValue: "1"}, 
    { value: setType(1), triggerValue: "1"} 
]), 
}; 

function setType(trigger){ 
    return trigger = "0" ? "Apple" : "Microsoft" 
} 

或更好,但

viewModel = 
{ 
    objectName: ko.observable([ 
    setVal(0), 
    setVal(1), 
    setVal(1), 
]), 
}; 

function setVal(trigger){ 
    return {value: (trigger = "0" ? "Apple" : "Microsoft"), triggerValue: trigger }; 
} 
+0

非常感谢。我用observable成员创建了一个类,我在viewModel中使用了类实例。通过这种方法,我可以在我的课堂中使用计算功能。 – user3715656