删除Dojo dGrids的事件侦听器

时间:2014-02-05 21:21:13

标签: javascript dojo dgrid

我正在以编程方式创建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时,删除所有侦听器的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

由于你正在使用网格自己的on方法,它会在调用网格的destroy方法时自动删除这些侦听器(特别是在旧的IE中;较新的浏览器应该能够正确地通过GC本身)。

由于您在DijitRegistry中混音,当相应的标签关闭或容器本身被破坏时,您的TabContainer应自动销毁网格。