0

注意:这 不是 关于 ObservableArrays 的问题。

假设我有以下视图模型:

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获取的是数组中可观察对象的展开值(不是可观察对象本身),并且似乎无法返回可观察对象或传递自定义参数。

4

1 回答 1

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>

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

于 2013-02-18T04:44:26.107 回答