Javascript YUI3自定义异步事件在Y.Global上不起作用
我正在尝试实现异步事件利用。因此,即使延迟订阅,应用程序也会收到事件传递的通知,类似于加载或就绪事件 到目前为止我有什么,但运气不好Javascript YUI3自定义异步事件在Y.Global上不起作用,javascript,yui3,custom-events,Javascript,Yui3,Custom Events,我正在尝试实现异步事件利用。因此,即使延迟订阅,应用程序也会收到事件传递的通知,类似于加载或就绪事件 到目前为止我有什么,但运气不好 YUI().use('event', 'event-custom', function(Y){ function onCustomEvent () { Y.Global.on('custom:event', function(){ alert('custom fired'); }); } window.setTimeout
YUI().use('event', 'event-custom', function(Y){
function onCustomEvent () {
Y.Global.on('custom:event', function(){
alert('custom fired');
});
}
window.setTimeout(onCustomEvent, 2000);
});
YUI().use('event', 'event-custom', function(Y){
Y.publish('custom:event', {
emitFacade: true,
broadcast: 2,
fireOnce: true,
async: true
});
function fireCustomEvent () {
Y.Global.fire('custom:event');
}
window.setTimeout(fireCustomEvent, 1000);
});
如果有人能提示一下这个代码有什么问题?多谢各位
UPD:
经过一点调查,结果表明,在一个
use()
实例中以及在不使用Global
广播的情况下,性能良好。这不是缺陷就是局限。仍在发现好吧,在高层,与全局事件(我如何理解它)的不一致性在于Y对象的沙箱性质。因此,在某个时刻,您可能只全局触发同步事件,从而导致您subscribe
到在Y实例上生成的自定义事件的异步参数无法进一步传递(并且YUI使用了一些默认值或其他内容)。这可能是有道理的,但为什么这样的事件应该在全球范围内引发呢?要么我错过了YUI的一些重要部分,这就是bug报告的候选者
无论如何,我没有时间深入了解YUI,可能需要40行代码:
YUI.add('async-pubsub', function(Y) {
var subscribers = {};
if ( !YUI.asyncPubSub ) {
YUI.namespace('asyncPubSub');
YUI.asyncPubSub = (function(){
var eventsFired = {};
function doPublishFor(name) {
var subscriber;
for ( subscriber in subscribers ) {
if ( subscriber === name ) {
(subscribers[name]).call();
delete ( subscribers[name] ); // Keep Planet clean
}
}
}
return {
'publish': function(name, options) {
eventsFired[name] = options || {};
doPublishFor(name);
},
'subscribe': function(name, callback) {
if ( subscribers[name] ) {
Y.log('More than one async subscriber per instance, overriding it.', 'warning', 'async-pubsub');
}
subscribers[name] = callback || function() {};
if ( eventsFired[name] ) {
window.setTimeout(
function () {
doPublishFor(name);
},0
);
}
}
};
})();
}
Y.asyncPubSub = YUI.asyncPubSub;
}, '1.0', {requires: []});
这里有一些限制和优化空间,比如每个use
实例只能为一个事件订阅一个操作,但我不需要更多。如果有兴趣的话,我也会在将来尝试
仍然对YUI的行为感到好奇,是虫子还是什么