RequireJS不等待模块加载?

时间:2013-03-04 15:56:28

标签: javascript requirejs amd

我正在努力解决只尝试加载应用程序所需模块的问题。该模块列表将有所不同,如下所示。

此代码内嵌在动态页面中:

<script data-main="js/main" src="js/require.js"></script>
<script>
  //APPROACH #1
  (function(){

     <% foreach(DashBoardItem item in AvailableItems){ %>
          require('js/dashboard/<%= item.Name.ToLower() %>').init(<%= CurrentUser.ID %>);  
     <% } %>

  }());
</script>

想法是产生类似的东西:

<script>
 //APPROACH #1
 (function(){
    require('js/dashboard/sales').init(123);
    require('js/dashboard/inventory').init(123);
    require('js/dashboard/deadlines').init(123);
  }());
</script> 

我不确定这是否可行,或者是因为上述方法导致错误

  

尚未为上下文加载模块名称“js / dashboard / sales”:_。使用require([])

我尝试生成这个:

<script>
   //APPROACH #2
   require(['js/dashboard/sales', 'js/dashboard/inventory', 'js/dashboard/deadlines' ],
           function(sales, inventory, deadlines){
              sales.init(123);
              inventory.init(123);
              deadlines.init(123);
           });
</script>

但这失败了,因为显然RequireJS不会等待加载模块,并且这三个回调参数(salesinventorydeadlines)将为undefined时它执行。

我是否完全错了?如何将不同的所需模块列表从服务器端传递给客户端JS?

更新 - 已修复

我的问题是我的模块(销售,库存,截止日期)被错误地声明了。感谢下面的 @anoopelias 的评论,我意识到我在其中使用了require(...)而不是define(...)。所以他们就像:

//example of WRONG sales.js module
require(['jquery', 'other-module'], function($, otherModule){
  //do stuff, return some object instance
});

一旦我修改如下,我可以使用上面的 APPROACH#2 ,它工作正常。

//example of correct sales.js module
define(['jquery', 'other-module'], function($, otherModule){
  //do stuff, return some object instance
});

1 个答案:

答案 0 :(得分:0)

只是为了记录,对于方法#1你只是忘记了模块周围的[]:

 <% foreach(DashBoardItem item in AvailableItems){ %>
      require(['js/dashboard/<%= item.Name.ToLower() %>']).init(<%= CurrentUser.ID %>);  
 <% } %>

除非你的js / main没有要求这个模块,否则requirejs会抱怨。即使你把它们包含在你的js / main中,你也必须等待&#34;等等。对于main来加载完成(所以将foreach嵌入到js / main的require调用中)

相关问题