【问题标题】:Removing event listeners for Dojo dGrids删除 Dojo dGrids 的事件侦听器
【发布时间】:2014-02-05 21:21:13
【问题描述】:

我正在以编程方式创建 dGrid,并为诸如“.dgrid-row:click”、mouseUtil.enterRow 和 mouseUtil.leaveRow 之类的事件添加侦听器。如果我为单个网格执行此操作,那将很容易做这样的事情来创建监听器并在我完成网格时将其删除。

var clickEvent = dataGrid.on(".dgrid-row:click", gridSelect);
//code
clickEvent.remove();

但是,我在一个循环中创建了几个 dGrid。

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 时,删除所有侦听器的最佳方法是什么?

【问题讨论】:

    标签: javascript dojo dgrid


    【解决方案1】:

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

    由于您正在混入DijitRegistry,因此您的TabContainer 应该在各自的选项卡关闭或容器本身被破坏时自动破坏网格。

    【讨论】:

    • 谢谢。我怀疑是这种情况,但我想确定一下。
    猜你喜欢
    • 1970-01-01
    • 2018-09-04
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多