1

使用 apache cordova 2.7 版时出现问题。在浏览器中,当我从 xampp 运行代码时,代码似乎运行良好。但是当我尝试编译到 IOS 时它就不起作用了。

我认为这个问题可能与用于加载车把模板和 html 文件的 require.js 文本插件有关,因为加载文件的文件协议限制。

我还认为这可能与未侦听设备就绪事件有关,但我不确定如何在此设置中正确执行此操作。

我们的 main.js 代码是:

require.config({
   shim: {
      underscore: {
         exports: '_'
      },
      backbone: {
         deps: ['underscore', 'jquery'],
         exports: 'Backbone'
      },
      handlebars: {
         exports: 'Handlebars'
      },
      flipBook: {
         deps: ['jquery']
      },
      touchSlider: {
         deps: ['jquery']
      }
   },
   paths: {
      jquery: 'libs/jquery',
      jquerymobile: 'libs/jquery.mobile',
      underscore: 'libs/underscore',
      backbone: 'libs/backbone',
      handlebars: 'libs/handlebars',
      cordovaios: 'libs/cordova-2.7.0',
      text: 'libs/text',
      flipBook: 'plugins/flipbook.min',
      touchSlider: 'plugins/jquery.touchSlider.min'
   }
});

// Includes File Dependencies
require(["cordovaios", "jquery", "backbone", "routers/router"], function(
   cordova, $, Backbone, Router) {
   // Set up the "mobileinit" handler before requiring jQuery Mobile's module
   $(document).on("mobileinit", function() {
      window.App = {
         Models: {},
         Collections: {},
         Views: {},
         Routers: {}
      };
      $.mobile.linkBindingEnabled = false;
      $.mobile.hashListeningEnabled = false;

      $(document).on('pagehide', 'div[data-role="page"]', function(event, ui) {
         $(event.currentTarget).remove();
      });
      $(document).on('pagebeforeshow', 'div[data-role="page"]', function () {
         $.mobile.showPageLoadingMsg();
      });
      $(document).on('pageshow', 'div[data-role="page"]', function () {
         $.mobile.hidePageLoadingMsg();
      });
      document.addEventListener('touchmove', function (e) {
         e.preventDefault();
      });
   });

   require(["jquerymobile"], function () {
      // Instantiates a new Backbone.js Mobile Router
      new Router();
   });
});
4

1 回答 1

2

在您的配置中,您不必指定文本插件。我认为您需要做的就是设置基本网址并在那里安装插件。我有一个我参考的项目

require.config({
     baseUrl: 'asesets/js/libs'
});

然后我把文本插件放在那里,它会自动获取参考。但是,这样做的缺点是您必须更改一些路径引用以获取其他内容。

第二个问题是准备好文件。我还没有对此进行测试,因为我的应用程序在没有检查设备是否准备就绪的情况下工作,因为 JS 位于我的 HTML 的底部。但是,我认为您必须先检查其他一些带有 phonegap 的区域。所以我认为(再次未经测试)你需要做的就是使用 requirejs 加载事件。 http://requirejs.org/docs/api.html#pageload

希望有帮助。我可能会在今晚测试准备好的文件,如果它有效,我会更新。

于 2013-07-26T14:38:06.727 回答