我已经查看了一些关于类似问题的相关搜索,但无论我尝试与工作结果有多接近,我似乎都无法弄清楚以下代码出了什么问题。
<div data-bind="foreach: collections" >
<div data-bind="text:name,click: $data.AddToCollectionB">
<div data-bind="foreach: collectionB" >
<input type="text" data-bind="value: name">
</div>
</div>
</div>
var kt = kt || {};
kt.itemA= function(n) {
var self = this;
self.name = n.name;
self.collectionB = ko.observableArray(n.colB);
self.AddToCollectionB = function () {
self.collectionB.push(kt.itemB({ name: 'test-nested sub item' }));
alert(self.name);
alert(self.collectionB().length);
};
};
kt.itemB= function(n) {
var self = this;
self.name = ko.observable(n.name);
};
kt.vm= new (function() {
var self = this;
self.collections= ko.observableArray([new kt.itemA({name:'item 1', colB: [new kt.itemB({name:'sub-item'})]}),new kt.itemA({name:'item 2', colB: []})]);
});
ko.applyBindings(kt.vm);
有人可以指出我做错了什么吗?
jsFiddle链接:http://jsfiddle.net/L7uxh/31/
谢谢
最佳答案
当您的主 div
上有 text: name
时,它会破坏其中的内容。
您需要执行一些操作,例如将 name
放入 div
内的 span
中,例如:http://jsfiddle.net/rniemeyer/L7uxh/44/
关于knockout.js - knockout 嵌套的 observableArray 不绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10741962/