我正在努力解决只尝试加载应用程序所需模块的问题。该模块列表将有所不同,如下所示。
此代码内嵌在动态页面中:
<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不会等待加载模块,并且这三个回调参数(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
});
答案 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调用中)