我遇到一些第三方代码正在使用
执行回调的情况YUI({
delayUntil: 'domready'
}).use(....)
我的问题是我正在为我的代码使用另一个异步脚本加载器,我需要延迟该回调,直到我的脚本加载完毕。我正在使用Yeti进行单元测试,将YUI注入测试页面,否则我的代码与YUI无关。
jQuery有一个holdReady方法,它延迟执行通过jQuery注册的domready处理程序,直到稍后。我想知道YUI是否有一些等效的方法。这是针对测试页面而且测试中的代码不使用YUI,所以如果解决方案涉及一些丑陋的黑客,那就没事了。
修改
事实证明,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);
}
}]);
}();