Javascript 如何与RequireJS同步加载脚本

Javascript 如何与RequireJS同步加载脚本,javascript,asp.net,requirejs,Javascript,Asp.net,Requirejs,我正在ASP.NET中使用RequireJS。有一个用户控件,它包含一个脚本文件,并注册一个启动脚本以初始化自身。以下是生成的代码: <script src="script/UserControls/myctrl.js" type="text/javascript"></script> 所以,问题是启动脚本在myctrl.js文件有机会运行之前运行。目前,require调用使用回调函数,该函数显然要到稍后才会运行,这就是问题所在。。。在创建MyCtrl之前,脚本将返回,

我正在ASP.NET中使用RequireJS。有一个用户控件,它包含一个脚本文件,并注册一个启动脚本以初始化自身。以下是生成的代码:

<script src="script/UserControls/myctrl.js" type="text/javascript"></script>
所以,问题是启动脚本在myctrl.js文件有机会运行之前运行。目前,require调用使用回调函数,该函数显然要到稍后才会运行,这就是问题所在。。。在创建MyCtrl之前,脚本将返回,浏览器将继续执行启动脚本

我试着简单地调用
require(['script/dep1','script/dep2'])位于文件顶部,但这也不会阻止,并且脚本会失败,因为依赖项尚未加载。顺便说一下,依赖项是模块,例如,它们使用
define()

有没有办法与RequireJS同步加载脚本文件?API文档说“在具有同步加载的服务器端JavaScript环境中使用RequireJS应该像重新定义require.load()一样简单”,但我不知道这意味着什么


有什么建议吗?

我假设require.js的脚本标记在您提到的内容之上。如果是这样,那么我会将myctrl.js转换为一个模块(在其中使用“define('myctrl',..”)而不是“require(..”),然后在内联脚本标记内容中执行以下操作:

<script type="text/javascript">
require(["myctrl"], function () {
    function myCtrl1_init() {
        // initialize control
        // *JS ERROR* because myctrl.js hasn't run yet
        Sys.Application.remove_load(myCtrl1_init);
    }
    Sys.Application.add_load(myCtrl1_init);
});
</script>

需要([“myctrl”]、函数(){
函数myCtrl1_init(){
//初始化控件
//*JS错误*因为myctrl.JS尚未运行
系统应用程序删除加载(myCtrl1\u init);
}
系统应用程序添加加载(myCtrl1\u init);
});
我不熟悉ASP.NET,所以我不确定在DOMContentLoaded后可能触发的回调中执行那些Sys.Application调用是否可以,但以上是一般的想法


无法使用RequireJS在浏览器中同步加载脚本,需要使用如上所述的回调方法。require.load()信息面向希望制作在同步环境(基本上是非浏览器JS环境)中运行的RequireJS适配器的开发人员.

那么,整个初始化是异步的吗?似乎是合理的,但我能指望在myCtrl1_init启动时DOM已经完成加载吗?如果您想确保在DOM就绪后启动myCtrl1_init,那么用require.ready().require([“myctrl”],function(){require.ready(function)()包装代码{函数myCtrl1_init…..优化器能否同步加载脚本?我需要使用它访问另一个应用程序的窗口对象。
require(['script/dep1', 'script/dep2'], function(dep1, dep2) {      
    MyCtrl = function () {
    };
    MyCtrl.init = function(id) {
        dep1.doSomething();
    }
};
<script type="text/javascript">
require(["myctrl"], function () {
    function myCtrl1_init() {
        // initialize control
        // *JS ERROR* because myctrl.js hasn't run yet
        Sys.Application.remove_load(myCtrl1_init);
    }
    Sys.Application.add_load(myCtrl1_init);
});
</script>