RequireJS不等待模块加载?

ser*_*ira 6 javascript amd requirejs

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

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

<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>
Run Code Online (Sandbox Code Playgroud)

这个想法是产生这样的东西:

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

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

尚未为上下文加载模块名称"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>
Run Code Online (Sandbox Code Playgroud)

但这种失败,因为显然RequireJS不会等待模块加载和这三个参数的回调(sales,inventory,deadlines)会undefined在执行时.

我完全错了吗?如何从服务器端向客户端JS传递所需模块的变化列表?

更新 - 修复

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

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

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

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

psc*_*eit 0

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

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

除非你的 js/main 没有需要这个模块, requirejs 会抱怨。即使您将它们包含在 js/main 中,您也必须“等待”main 完成加载(因此将 foreach 嵌套在 js/main 的 require 调用中)