我正在通过网格的HeaderRow实现过滤,我遇到了一个我似乎无法解决的问题。
显示dataView事件处理程序的所有示例都使用全局变量来标识相关的网格,例如:
gridQMsgsDataView.onRowCountChanged.subscribe(rowCountChanged);
(...elsewhere...)
function rowCountChanged(e, args) {
grid.updateRowCount(); //'grid' is a global variable assigned to a slickGrid.
grid.render();
}
与我找到的示例不同,我在运行时动态创建slickjGrids和dataViews,并在创建它们时将它们的引用变量保存在列表中。
我无法在编译时告诉我将会有多少,因此我不能使用类似全局“网格”变量来引用相关的数据视图和/或slickgrid。
所以我有两个问题,并感谢任何见解:
当我的rowCountChanged处理程序被调用时......
A)我如何知道哪个dataView生成了该事件?
B)一旦我知道了,我怎么知道dataView与哪个slickgrid相关联?
答案 0 :(得分:0)
A) rowCountChanged
在dataGrid的上下文中调用;所以this
是回调中的dataGrid,或者使用B)中描述的相同闭包
B)使用闭包,即使多个网格(显示)绑定到同一个dataView也是有效的(这是因为dataView 不与特别是网格。)
使用dataView创建网格(或稍后分配)时,在同一范围内(grid
可用),使用辅助函数订阅回调以封闭网格:
function watchRowCountChanges(grid, dataView) {
dataView.onRowCountChanged.subscribe(function (e, args) {
grid.updateRowCount(); // `grid` is a _local_ variable
grid.render();
console.log(grid.name, this === dataView); // true story, use either!
});
}
// elsewhere...
var grid1 = new Slick.Grid(element1, dataView, columns1, options1);
grid1.name = 'grid1';
watchRowChanges(grid1, dataView);
var grid2 = new Slick.Grid(element2, [], columns2, options2);
grid2.name = 'grid2';
grid2.setData(dataView);
watchRowChanges(grid2, dataView);
当行数改变时:
grid1 true
grid2 true