我正在创建一个Phonegap应用。我正在使用Require.js并正在实现推送通知。在我的index.html文件中,我有:
<script data-main="js/app" src="js/require.js"></script>
<script type="text/javascript" src="js/app/index.js"></script>
<script type="text/javascript">
app.initialize();
</script>
app.js定义Require.js模块的基本URL并启动路由器。 Index.html定义“deviceready”监听器。问题是在index.js中,我需要对Require.js模块进行压缩,例如Jquery。但是,例如,在index.js中,如果我这样做:
initialize: function() {
require(["jquery"], function () {
});
},
我收到错误:
Uncaught Error: Script error for: jquery
http://requirejs.org/docs/errors.html#scripterror at file:///android_asset/www/js/require.js:8
Uncaught Error: Load timeout for modules: backbone
http://requirejs.org/docs/errors.html#timeout at file:///android_asset/www/js/require.js:8
我认为这是因为在app.js仍在设置路径等时调用了index.js.我需要在app.js完成后执行index.js。我不能用:
$(document).ready(function() {
app.initialize();
});
因为Jquery作为模块加载,所以会抛出错误。我也无法将index.js作为模块加载,因为我在另一个SO问题here中写了一个问题。
任何想法我能做什么?
答案 0 :(得分:2)
如果您使用单独的<script>
标记而不是data-main
加载主文件,那么您的RequireJS配置将立即运行:
<script src="js/require.js"></script>
<script src="js/app.js"></script>
这可能会有问题,具体取决于js/app.js
包含的内容。如果它导致问题,那么您可以将此文件拆分为a)仅包含RequireJS配置的文件(让我们称之为js/requirejs-config.js
),b)适当的应用程序(仍然称为js/app.js
)。如下所示:
<script src="js/require.js"></script>
<script src="js/require-config.js"></script>
<script>
require(["js/app"]);
</script>
或者您可以在配置中添加顶级deps
字段,例如deps: ["js/app"]
,以避免需要第三个<script>
标记。
答案 1 :(得分:-1)
我在ios上使用我的cordova应用程序遇到了同样的问题。动态加载失败并出现相同的错误,但我在浏览器上运行的代码相同。
我的解决方法是首先通过定义&#39; app&#39;应用程序的shim.deps来静态加载模块。在data-main中,因此模块最初通过require加载。随后,当需要模块时它就可用了 - require([&#34; jquery&#34;])就可以了。
但绝对想找到问题的根源,但现在我可以继续了。