在Require.js完成设置配置后执行javascript脚本

我正在创建一个Phonegap应用程序。 我正在使用Require.js并正在实现推送通知。 在我的index.html文件中,我有:

   app.initialize();  

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问题中写了一个问题。

任何想法我能做什么?

如果使用单独的标记而不是data-main加载主文件,那么RequireJS的配置将立即运行:

   

这可能会有问题,具体取决于js/app.js包含的内容。 如果它导致问题,那么您可以将此文件拆分为a)仅包含RequireJS配置的文件(让我们称之为js/requirejs-config.js ),b)适当的应用程序(仍然称为js/app.js )。 所以类似于:

    

或者你可以在你的配置中添加一个顶级deps字段,如deps: ["js/app"] ,以避免需要第三个标记。

我在ios上使用我的cordova应用程序遇到了同样的问题。 动态加载失败并出现相同的错误,但我在浏览器上运行的代码相同。

我的解决方法是首先通过在data-main中定义’app’的shim.deps来静态加载模块,因此模块最初通过require加载。 随后,当需要模块时它可用 – require([“jquery”])然后就可以了。

绝对想要找到问题的根源,但是现在我可以继续了。