我正在使用 KnockoutJs 2.2。我有一个可以有零对多类别关联的记录。但是,我发现 KnockoutJs 实际上并没有将值绑定到记录的类别数组中的项目。
类别数组是 {id, name} 对象。这是从查找列表中得出的。
self.categories = ko.observableArray([{id:1,name:'Test1'},{id:2,name:'Test2'}]);
在我的视图模型上,我有一个记录对象。该对象的字段之一是类别(observableArray)。
categories: ko.observableArray([])
为了在绑定中简洁起见,记录对象在视图模型上称为“r”。
<div class="yui3-u-4-5">
<!-- ko foreach: r.categories-->
<select data-bind="options: $parent.categories, optionsCaption:'-',
optionsValue:'id', optionsText:'name', value:$data" />
<div class="del" data-bind="click: $parent.removeCat" />
<br />
<!-- /ko -->
<button data-bind="click: addCat">Add category</button>
</div>
当用户添加或删除类别时,会调用以下代码:
self.removeCat = function (data) {
self.r.categories.remove(data);
};
self.addCat = function () {
self.r.categories.push(ko.observable(null));
}
基本上,当一个类别被添加到 self.r.categories 数组中,然后你从下拉列表中选择一个类别时,所选项目的值不会绑定到数组中的 observable ($data)。数组值保持为空。
我在这里重新创建了问题:http: //jsfiddle.net/fxXsq/
也许我应该以另一种方式这样做?
谢谢你的帮助克里斯