1

我正在尝试向我的 viewModel 对象添加一个计算值。我正在使用 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);

我希望 viewModel objectName 输出看起来像

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

谢谢。KDK

4

1 回答 1

0

这里发生了几个错误

  1. 您使用的是 observable 而不是 observableArray,从技术上讲,observable 可以存储数组,但最好使用 observableArray
  2. 您正在尝试将计算结果绑定到 objectName().value,但对象名称应该是一个数组,因此它不会有值,理想情况下它会像这个 objectName()[1].value。
  3. 这不是如何分配属性,ko.computed 不是函数的替代品,computed 用于监控现有的 observales,并在监控的 observables 之一发生更改时重新计算。

我会做这样的事情。

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 };
}
于 2014-06-06T17:15:12.613 回答