2

所以这是我的代码流程:

main.js --> jquerymobile --> router --> extra --> lib1 --> lib2

在 extra.js 中,加载 lib2 后,我设置了我的模块

//extra.js
require( ['lib1'], function () {
        $("#body").append('<p>got lib1</p>');
        require(['lib2'], 
            $("#body").append( '<p>got lib2</p>' );
            window.stuff = true;
            $("#body").append( '<p>set my module</
        });

});

在我的 router.js 中,我在额外加载后使用我的模块:

//router.js
require(['../extra'], function() {
        $("#body").append( '<p>using my module</p>' );
        console.log( window.stuff );
    });

我希望在 router.js 中使用我的模块之前对其进行设置。但是,这是我得到的顺序:

set my router
using my module
got lib1
got lib2
set my module

当然,当我尝试使用我的模块(window.stuff)时,我会变得不确定。

这是此错误的演示:https ://dl.dropbox.com/u/19311981/demo.zip

你们能帮我弄清楚我在指定依赖项时做错了什么吗?

4

1 回答 1

3

确保在额外返回时加载 lib1 和 lib2 的唯一方法是使用定义语法并预先将它们声明为依赖项。稍后再做类似于任何其他异步调用。你不知道它什么时候会回来。

//extra.js
define(['lib1', 'lib2'], function(lib1, lib2) {
    $("#body").append('<p>got lib1</p>');
    $("#body").append( '<p>got lib2</p>' );
    window.stuff = true;
    $("#body").append( '<p>set my module</
    return something;
});

您可能还想重新考虑使用全局 window.something 变量作为模块的通信方法。相反,让模块返回一些您可以使用的对象:

//router.js
require(['../extra'], function(extra) {
    $("#body").append( '<p>using my module</p>' );
    console.log( extra );
});
于 2013-03-28T13:16:38.303 回答