Dav*_*ave 6 slickgrid knockout.js
我正在使用基于示例http://jsfiddle.net/rniemeyer/A9NrP/的 knockout.js的SlickGrid
我有网格填充和添加按钮按照示例工作.我遇到的问题是当我通过ko.dependentObservable更新我的viewmodel的rows属性时,ko.bindingHandlers的'update'部分被触发但是光滑的网格没有获取更改.
定义绑定的html:
<div id="grid" data-bind="slickGrid: { data: rows, columns: columns }"></div>
Run Code Online (Sandbox Code Playgroud)
SlickGrid代码(与示例相同):
var grid;
ko.bindingHandlers.slickGrid = {
init: function (element, valueAccessor) {
var settings = valueAccessor();
var data = ko.utils.unwrapObservable(settings.data);
var columns = ko.utils.unwrapObservable(settings.columns);
var options = ko.utils.unwrapObservable(settings.options) || {};
grid = new Slick.Grid(element, data, columns, options);
},
update: function (element, valueAccessor, allBindingAccessor, viewModel) {
var settings = valueAccessor();
// I can see the correct data here but the grid does not update
var data = ko.utils.unwrapObservable(settings.data);
grid.render();
}
}
Run Code Online (Sandbox Code Playgroud)
我的模特:
myViewModel = {
data : ko.observableArray(),
tabs: ['High', 'Medium', 'Low'],
rows : ko.observableArray([]),
columns : [
{
id: "id",
name: "ID",
field: "id"
},
{
id: "Location",
name: "Location",
field: "Location"
},
{
id: "Comment",
name: "Comment",
field: "Comment"
}
],
addItem: function() { // this works and SlickGrid adds a new row
this.rows.push(new ModelRow(0, "New", 5.00));
},
Run Code Online (Sandbox Code Playgroud)
}
进行ajax调用的代码,并触发ko.bindingHandlers.slickGrid.update但slickgrid似乎没有获取更改,ajax确实返回有效数据,并在用户单击链接时触发:
ko.dependentObservable(function () {
if (this.data.lastAlarmRequest) this.data.lastAlarmRequest.abort();
this.data.lastAlarmRequest = $.get("/audit/alarmsdata/high", null, this.rows);
}, i2owater.viewmodels.AlarmsForViewModel);
Run Code Online (Sandbox Code Playgroud)
为什么addItem函数有效但ko.bindingHandlers.slickGrid.update不起作用?在更新功能中,我可以看到网格应该绑定的正确数据.是因为行属性中的所有数据都被覆盖了吗?
更新:我试过使用grid.invalidate(); 但它不起作用,并且还看到addItem函数在执行ko.dependentObservable后停止工作
我刚刚遇到了同样的问题并找到了解决方案,将更新代码更改为以下内容:
update: function (element, valueAccessor, allBindingAccessor, viewModel) {
var settings = valueAccessor();
// I can see the correct data here but the grid does not update
var data = ko.utils.unwrapObservable(settings.data);
grid.setData(data,true)
grid.render();
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,setData 中的 true 参数表示是否希望网格滚动回顶部。
| 归档时间: |
|
| 查看次数: |
7266 次 |
| 最近记录: |