6

我在尝试仅加载我的应用程序需要的模块时遇到问题。该模块列表会有所不同,如下所示。

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

<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”:_。使用要求([])

我尝试生成这个:

<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 不会等待模块加载,而这三个回调参数 ( 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
});

一旦我像下面这样修复,我可以从上面使用APPROACH #2并且效果很好。

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

1 回答 1

0

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

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

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

于 2014-05-30T08:43:06.593 回答