处理数组中的observable

时间:2013-02-18 00:30:02

标签: javascript knockout.js knockout-2.0

注意: 有关ObservableArrays的问题。

假设我有以下viewmodel:

var viewmodel = {
    arrayOfBooleans: [
        ko.observable(false),
        ko.observable(false),
        ko.observable(false)
    ]
}

这样的观点:

<div data-bind="foreach: arrayOfBooleans">
    <button data-bind="click: ????">Set to true</button>
</div>

我可以在foreach内做什么来让<button>在点击时将observable设置为true?使用data-bind="click: someFunction",第一个参数someFunction得到的是数组中的observable的未包装值(不是observable本身),并且似乎无法返回observable或传递自定义参数。

1 个答案:

答案 0 :(得分:1)

希望它会给出一些想法。

var viewmodel = {
  var self = this;
 self.arrayOfBooleans = ko.observableArray([]);

 self.arrayOfBooleans.push(new _newBoolean());
 self.arrayOfBooleans.push(new _newBoolean());
 self.arrayOfBooleans.push(new _newBoolean());

 function _newBoolean() { 
   self.one = ko.observable(false);
 }

self.setToTrue = function(index){
   self.arrayOfBooleans()[index].one(true);
 };
 }

如果您想将其作为按钮

<div data-bind="foreach: arrayOfBooleans">
  <button data-bind="click: $root.setToTrue($parent.arrayOfBooleans.indexOf($data))"> 
   Set to true
  </button>
  <input type=hidden data-bind="value:one" />
</div>

如果您想将它作为单选按钮而不是更简单

<div data-bind="foreach: arrayOfBooleans">
  <span>Set To True</span><input type=radio data-bind="value:one" />
</div>

如果你喜欢这个......请点击上传 * * 如果它解决了您的问题..请将此标记为答案