我遇到了带有命名空间的自定义事件的问题。
如果我绑定一个事件回调,指定我的自定义事件命名空间,则回调将进行两次。一旦我按预期使用命名空间触发它,而且当事件被触发时没有命名空间。
在我看来,当绑定到具有指定命名空间的事件时,不应该为非命名空间事件触发回调。
问题:我是否遇到过jQuery事件绑定的错误,或者我应该使用所述的解决方法来处理我的事件?我正在寻找这种情况下的最佳实践。
要重现的代码:
$(document).on('myevent.mynamespace', function (e) {console.log(e);});
$(document).trigger('myevent.mynamespace');
$(document).trigger('myevent');
输出:(控制台)
_.Event {type: "myevent", timeStamp: 1432746225028, jQuery21109806629773229361: true, isTrigger: 3, namespace: "mynamespace"…}
_.Event {type: "myevent", timeStamp: 1432746225033, jQuery21109806629773229361: true, isTrigger: 3, namespace: ""…}
预期:
_.Event {type: "myevent", timeStamp: 1432746225028, jQuery21109806629773229361: true, isTrigger: 3, namespace: "mynamespace"…}
解决方法:
$(document).on('myevent.mynamespace', function (e) {
// break out if the namespace does not match as expected
if (e.namespace !== 'mynamespace') return;
console.log(e);
});
$(document).trigger('myevent.mynamespace');
$(document).trigger('myevent');