2013-04-15 66 views
2

我正在通过我的网格的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和数据视图动态的例子,并在创建它们时将其参考变量保留在列表中。

我不知道在编译时会有多少,因此我不能使用全局“网格”变量来引用相关的数据视图和/或slickgrid。

所以我有两个问题,和欣赏任何见解:

当我rowCountChanged处理程序被称为...

A)我怎么知道哪个数据视图生成的事件?

B)一旦我知道了,我怎么知道dataView与哪个slickgrid关联?

回答

0

A)rowCountChanged在dataGrid的上下文中被调用;所以this是在回调的DataGrid或使用相同的封闭B中描述)

B)使用闭包,即使多个网格(显示器)被绑定到相同的数据视图(这是唯一可能的,其工作原理因为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 
相关问题