我提交您的考虑,这个小提琴:http://jsfiddle.net/alexdresko/HFFUL/5/
HTML中有两个相同的网格,但单击“加载”按钮时只会填充其中一个网格。
这是由于我自己对淘汰赛的基本误解,还是因为它是一个jqxgrid问题?
以下是代码:
<a href="#" data-bind="click: load">Load</a>
<div class="aGrid" data-bind="jqxGrid: { source: Stuff().People, columns: [ {text: 'Name', datafield: 'Name'} ], autoheight: true, sortable: true, altrows: true, enabletooltips:true }"></div>
<div class="aGrid" data-bind="jqxGrid: { source: Stuff().People, columns: [ {text: 'Name', datafield: 'Name'} ], autoheight: true, sortable: true, altrows: true, enabletooltips:true }"></div>
var dataFromServer = {
People: ko.observableArray([{
Name: "George"
}, {
Name: "Scot"
}])
};
var viewModel = function () {
this.Stuff = ko.observable({});
this.load = function () {
this.Stuff(dataFromServer);
};
};
$(function () {
var vm = new viewModel();
ko.applyBindings(vm);
});
答案 0 :(得分:2)
问题出现在source : Stuff().People
中,因为您在此处显式获取了Stuff
observable的值并访问了该属性的People
属性。更改Stuff
本身不会更改此绑定的可观察数组。
但是,总的来说还有一个更加精巧的解决方案,你也不需要让dataFromServer
成为一个可观察的:
<强> HTML:强>
<a href="#" data-bind="click: load">Load</a>
<div class="aGrid" data-bind="jqxGrid: { source: Stuff.People, columns: [ {text: 'Name', datafield: 'Name'} ], autoheight: true, sortable: true, altrows: true, enabletooltips:true }"></div>
<div class="aGrid" data-bind="jqxGrid: { source: Stuff.People, columns: [ {text: 'Name', datafield: 'Name'} ], autoheight: true, sortable: true, altrows: true, enabletooltips:true }"></div>
<强> JavaScript的:强>
var dataFromServer = [{
Name: "George"
}, {
Name: "Scot"
}];
var viewModel = function () {
this.Stuff = { People: ko.observableArray([]) }
this.load = function () {
for (i=0; i < dataFromServer.length; ++i) {
this.Stuff.People.push(dataFromServer[i]);
}
};
};
$(function () {
var vm = new viewModel();
ko.applyBindings(vm);
});
答案 1 :(得分:0)
不确定原因,但当我将这两个网格包裹在这样的div中时:
<div data-bind="if: Stuff().People">
工作得很好。当然,这会完全隐藏你的网格,直到你点击加载。