Jquery .off vs dojo?

时间:2014-06-27 04:40:21

标签: dojo

通过在Dojo中传递事件名来删除元素上的事件,等同于jquery $.off(event)

我试过了:

dojo.disconnect(handle) // but I dont have an handle to event

如何获得处理或有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

据我所知,没有开箱即用的解决方案,所以你必须自己实施一个解决方案。但是,如果您突然断开特定类型的所有事件处理程序,这可能是一个危险的功能。

但是,您可以使用dojo/aspect模块拦截对dojo/on模块的调用,例如:

aspect.around(arguments, 0, function(original) {
    on.signals = [ ];
    return function(dom, name, handler) {
        console.log(arguments);
        on.signals.push({
            signal: original.apply(this, arguments),
            name: name
        });
    };
}, true);

我没有找到一种方法来在函数本身周围放置一个方面,而不是包含在一个对象内的函数。所以我使用了一个肮脏的技巧并使用了arguments数组,因为on模块是我的第一个参数,这将在dojo/on引用周围添加一个方面。

当您使用dojo/on绑定事件处理程序时,会将其保存在数组中。现在您可以编写自己的dojo/on::off()函数,例如:

on.off = function(eventName) {
    arrayUtils.forEach(on.signals, function(signal) {
        if (signal.name === eventName) {
             signal.signal.remove();   
        }
    });
};

现在你可以使用:

on.off("click");

断开所有点击事件处理程序。

可以在JSFiddle:http://jsfiddle.net/Lj5yG/上找到完整的示例,但这可能会得到改进。