我遇到一些第三方代码正在执行回调的情况
YUI({
delayUntil: 'domready'
}).use(....)
我的问题是我正在为我的代码使用另一个异步脚本加载器,我需要将该回调延迟到我的脚本加载之后。我正在使用 Yeti 进行单元测试,它将 YUI 注入测试页面,否则我的代码与 YUI 无关。
jQuery 有一个 holdReady 方法,它延迟执行通过 jQuery 注册的 domready 处理程序,直到稍后的时间。我想知道 YUI 是否有一些等效的方法。这是一个测试页面,被测代码不使用 YUI,所以如果解决方案涉及一些丑陋的 hack,那很好。
编辑:
事实证明,Yeti 使用它自己的作用域 YUI 对象,并且无论如何都无法访问它,所以即使我找到了这个问题的答案,它在这里也无济于事。如果有人想知道我是如何解决 Yeti 特定问题而没有在 YUI 中找到延迟文档就绪处理程序的方法,这里是我的代码:
!function(){
var mochaListeners = [];
var fakeRunner;
// Stub for Yeti in case mocha isn't loaded on domready
window.mocha = {
run : function(){
return fakeRunner = {
on : function(type, fn){
mochaListeners.push([type, fn]);
}
};
}
};
yepnope([
{
load : [
'assets/lib/lodash.js',
'assets/lib/jquery.js',
'assets/lib/css/mocha.css',
'assets/lib/mocha.js',
'assets/lib/chai.js',
'assets/lib/sinon.js'
],
complete : function(){
mocha.setup('bdd')
}
},{
load : 'assets/js/my_tests.js',
complete : function(){
executeTests = function(){
var runner = mocha.run();
runner.ignoreLeaks = true;
_.forEach(mochaListeners, function(listener){
runner.on(listener[0], function(){
_.extend(fakeRunner, runner);
listener[1].apply(this, arguments);
});
});
};
if(document.readyState === 'complete')
executeTests();
else
$(executeTests);
}
}]);
}();