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

構成では、テキスト プラグインを指定する必要はありません。あなたがする必要があるのは、ベースURLを設定し、そこにプラグインを用意することだけだと思います. 参照するプロジェクトがあります

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

次に、そこにテキスト プラグインを保持すると、参照が自動的に取得されます。ただし、これの欠点は、パス参照の一部を他のものに変更する必要があることです。

2 番目の問題は、ドキュメントの準備が整っていることです。JS が HTML の下部にあるため、デバイスの準備ができているかどうかを確認せずにアプリケーションが動作するため、これはまだテストしていません。ただし、最初に確認する必要があると思われる phonegap のある他の領域がいくつかあります。だから私は(再びテストされていない)あなたがする必要があるのはrequirejsロードイベントを使うことだけだと思います。 http://requirejs.org/docs/api.html#pageload

それが役立つことを願っています。今夜、準備が整ったドキュメントをテストし、機能するかどうかを更新します。

于 2013-07-26T14:38:06.727 に答える