淘汰赛foreach计算值

时间:2014-06-06 15:52:16

标签: object knockout.js foreach viewmodel computed-field

我正在尝试将计算值添加到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

1 个答案:

答案 0 :(得分:0)

这里发生了几个错误

  1. 你正在使用一个observable而不是observableArray,技术上一个observable可以存储一个数组,但你最好使用observableArray
  2. 你试图将一个计算器绑定到objectName()。value,但是对象名称应该是一个数组,因此它没有值,理想情况下就像这个objectName()[1] .value。 / LI>
  3. 这不是如何分配属性,ko.computed不是函数的替代,计算用于监视现有的observales,并重新计算何时在其中一个受监视的observable中进行更改。
  4. 我会做这样的事情。

    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 };
    }