如何确定哪个DataView生成了一个事件?

时间:2013-04-15 20:49:05

标签: events slickgrid dataview

我正在通过网格的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相关联?

1 个答案:

答案 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