使用Dojo的require.trace来跟踪整体加载进度

时间:2013-03-26 08:01:20

标签: javascript dojo amd

docs for Dojo's AMD loader提到了跟踪API。有没有关于如何实施的例子?

我想利用它来显示“加载的X of X”样式消息,而我的应用程序的各种依赖项已加载但我不知道如何这样做或在我的代码流中包含跟踪的位置。

编辑:似乎跟踪API仅适用于Dojo的源版本。是否有不同的方式来实现我想要的目标?

1 个答案:

答案 0 :(得分:1)

这段代码似乎有效,但它太脆弱了。它依赖于1)要求在Dojo的源版本中暴露它的内部工作,以及2)将来可能会改变的require属性。当然有更好的方法!

require( [], function()
{
    // output amd progress
    var loadWatchHandle = setInterval( function()
    {
        var all = Object.keys( require.modules ).length,
            waiting = 0;

        for( dep in require.waiting )
        {
            if( require.waiting[ dep ] !== 1 )
            {
                waiting++;
            }   
        }

        // write progress
        console.log( ( all - waiting ) + '/' + all + ' files (' + parseInt( ( all - waiting ) / all * 100 ) + '%)' );
    }, 50 );

    require( [ 'dojo/parser',
        'dojo/ready',
        'dijit/layout/BorderContainer',
        'squad_builder/TabContainer',
        'dijit/layout/ContentPane',
        'dojo/domReady!' ], 
    function( parser, ready )
    {
        parser.parse();

        ready( function() // uses ready not domReady because we want initial djits to be parsed
        {
            // stop tracing
            clearInterval( loadWatchHandle );

            // bootstrap here...

        } );
    } );
} );
相关问题