我正在以编程方式创建dGrids并为事件添加侦听器,例如“.dgrid-row:click”,mouseUtil.enterRow和mouseUtil.leaveRow。如果我在单个网格中执行此操作,则很容易做这样的事情来创建监听器并在我完成网格时将其删除。
var clickEvent = dataGrid.on(".dgrid-row:click", gridSelect);
//code
clickEvent.remove();
但是,我在循环中创建了几个dGrids。
for (result in results) {
var dataGrid = new (declare([Grid, Selection, DijitRegistry, ColumnHider]))({
id: "dgrid_" + result.name,
bufferRows: Infinity,
columns: result.columns,
selectionMode: "single",
"class": "resultsGrid"
});
dataGrid.on(".dgrid-row:click", gridSelect);
dataGrid.on(mouseUtil.enterRow, gridEnter);
dataGrid.on(mouseUtil.enterRow, gridEnter);
dataGrid.renderArray(result.data);
}
网格正被添加到TabContainer中。当我摆脱TabContainer时,删除所有侦听器的最佳方法是什么?
答案 0 :(得分:1)
由于你正在使用网格自己的on
方法,它会在调用网格的destroy
方法时自动删除这些侦听器(特别是在旧的IE中;较新的浏览器应该能够正确地通过GC本身)。
由于您在DijitRegistry
中混音,当相应的标签关闭或容器本身被破坏时,您的TabContainer
应自动销毁网格。