通过在Dojo中传递事件名来删除元素上的事件,等同于jquery $.off(event)
?
我试过了:
dojo.disconnect(handle) // but I dont have an handle to event
如何获得处理或有更好的方法吗?
答案 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/上找到完整的示例,但这可能会得到改进。