2012-06-18 57 views
0

我创建了一个函数,它返回我的html页面中的所有obserables项目。这个功能的〔实施例是动态内容与淘汰

<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer" class="InputText"/> 
<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer2" class="InputText"/> 
<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer3" class="InputText"/> 
<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer4" class="InputText"/> 

功能将reutrn [“AOfficer”,“AOfficer2”,“AOfficer3”,“AOfficer4”]

,现在我想成为使数据的上述名单-bind elemnts obserable

viewModel = { 
AOfficer : ko.observable(), 
AOfficer2 : ko.observable(), 
AOfficer3 : ko.observable(), 
AOfficer4 : ko.observable(), 
} 
ko.applyBindings(viewModel); 

上面是这样做的非动态的方式..但我只是不能似乎找到了解决这个问题的一个动态的方式..

我如何去解决这个?有解决方案吗?解决办法?

谢谢你们

回答

2

一个选项是创建一个自定义绑定,它将从现有值为您填充视图模型。

喜欢的东西:

ko.bindingHandlers.valueWithInit = { 
    init: function(element, valueAccessor, allBindingsAccessor, data) { 
     var property = valueAccessor(), 
      value = element.value; 

     //create the observable, if it doesn't exist 
     if (!ko.isWriteableObservable(data[property])) { 
      data[property] = ko.observable(); 
     } 
     data[property](value); 

     ko.applyBindingsToNode(element, { value: data[property] }); 

    } 
}; 

当您添加绑定,你需要指定属性的字符串名字,这样当它不存在最初的结合不会失败。

如果该方法不存在或仅使用该元素的值填充现有的observable,该方法将为您创建一个observable。

样品在这里:http://jsfiddle.net/rniemeyer/BnDh6/

0

也许你可以试着让它的observableArray():

var Officers = ko.observableArray([{name: AOfficer1, o_value: xxx},{name: AOfficer2, o_value: yyy}, and so on]); 

而且你的HTML的说:我在过去使用

<ul data-bind="foreach: Officers"> 
<li><span data-bind="text: name"></span><input type="text" data-bind="value: o_value" class="InputText"/></li> 
</ul>