我有一种感觉,我在这里遗漏了一些简单的东西,但是不能不这么想.这是我的脚本:
function FormDefinition() { var self = this; self.Fields = ko.observableArray([new FieldDefinition()]); } function FieldDefinition() { var self = this; self.Name = "Test"; } function viewmodel() { var self = this; self.formDef = ko.observable(new FormDefinition()); self.Name = "bob" self.addField = function(){ this.formDef().Fields().push(new FieldDefinition()); } } ko.applyBindings(new viewmodel());
这是我的标记:
<a data-bind="click: addField">Add</a><br/> <span data-bind="text: Name"></span> <ul data-bind="foreach: formDef().Fields"> <li data-bind="text: Name"></li> </ul>
这里是一个jsFiddle:http://jsfiddle.net/5xSmr/
解决方法
修正你的小提琴:
http://jsfiddle.net/5xSmr/2/
主要的问题是你正在调用Fields()而不是Fields. Fields()返回未包装的数组,直接推送它,ko将永远不会知道它.