上下文
我目前正在探索结合 KoGrid 的 KnockoutJS。
我有一个包含多个字段(也绑定到字段)的对象,以及我想在 KoGrid 中显示的子对象列表。
jsfiddle
我准备了一个 jsFiddle 来说明我遇到的问题:http:
//jsfiddle.net/kPmAJ/4/
问题:
我的视图模型包含一个可观察的 foo,其中包含父对象。
在这个父对象中,有一个属性children,它是一个observableArray包含对象
KoGrid 必将$root.foo().children
如果在初始化绑定之前填充了数组,则此方法有效。
但是,该对象之后被替换(数据通过 AJAX 加载并且可以重新加载),并且显然KoGrid 项目绑定丢失了。
我在想,由于我的 viewmodel 上的foo -object 是一个observable,如果 foo 被替换,这将触发 KoGrid 正在观察里面的数组进行更新。这确实适用于 foreach 绑定。
显然 KoGrid 并没有触发。
--
我在这里做错了什么,还是我在 KoGrid 中遇到了问题?
代码(仅供参考。见提琴手;))
var SampleObject = function (data) {
this.id = new ko.observable(data ? data.id : null);
this.children = new ko.observableArray([]);
if(data) {
var childrenMapped = [];
$(data.children).each(
function() {
childrenMapped.push(new SampleChildObject(this));
}
);
this.children(childrenMapped);
}
}
var SampleChildObject = function (data) {
this.name = new ko.observable(data ? data.name : null);
};
var vm = {
foo: new ko.observable('John Doe'),
bar: new ko.observable(
new SampleObject(
{
id: 1234,
children: []
})
)
};
ko.applyBindings(vm);
// Returns from an AJAX-call instead, so can't be before applyBindings
vm.bar(new SampleObject(
{
id: 1234,
children: [
{ name: 'test1' },
{ name: 'test2' },
{ name: 'test3' }]
}));
-
<div style="height: 500px;"
data-bind="koGrid: { data: bar().children }"></div>
<ul data-bind="foreach: bar().children">
<li data-bind="text: name"></li>
</ul>
谢谢!