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)
仅供记录,对于方法#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 调用中)
| 归档时间: |
|
| 查看次数: |
3230 次 |
| 最近记录: |