有一个YUI等同于jQuery的$ .holdReady()吗?

时间:2014-01-28 22:32:40

标签: javascript events yui domready

我遇到一些第三方代码正在使用

执行回调的情况
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);
            }
    }]);
}();

0 个答案:

没有答案