我已经创建了一个函数,它返回我的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"/>
该功能会重新燃起['AOfficer','AOfficer2','AOfficer3','AOfficer4']
现在我想制作上面的数据绑定列表 - 可以观察到的元素
viewModel = {
AOfficer : ko.observable(),
AOfficer2 : ko.observable(),
AOfficer3 : ko.observable(),
AOfficer4 : ko.observable(),
}
ko.applyBindings(viewModel);
以上是这种做法的非动态方式..但我似乎无法找到一种动态的方法来解决这个问题。
我将如何解决这个问题?有解决方案吗?一个解决方法?
谢谢你们
答案 0 :(得分: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。
答案 1 :(得分: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>