javascript - RequireJS 不等待模块加载?

标签 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> 

我不确定这是否可行或是否应该这样做,因为上述方法会导致错误

Module name "js/dashboard/sales" has not been loaded yet for context: _. Use 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
});

一旦我像下面那样修复后,我就可以使用上面的方法 #2 并且它工作正常。

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

最佳答案

仅作记录,对于方法 #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 调用中)

关于javascript - RequireJS 不等待模块加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15205595/

相关文章:

javascript - 图像未显示在 Canvas 上

javascript - react native FlatList keyExtractor 和 listKey

javascript - RequireJS加载错误

javascript - 让 requirejs 忽略库

javascript - ReactJS - 如何更改 React 组件的样式和类?

javascript - 我需要获得值的总和

javascript - 使用 RequireJS 加载模块及其所有插件

javascript - 从不同文件调用函数时出现问题 : "updateDB.inputFormToDB is not a function"

jQuery 1.7+、AMD (RequireJS) 和全局范围

javascript - 使用 browserify 跨文件加载重复模块