我在尝试仅加载我的应用程序需要的模块时遇到问题。该模块列表会有所不同,如下所示。
此代码内联在动态页面中:
<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
});