2013-04-15 36 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 
相關問題