1

JQM アプリがあり、Backbone を組み込んでいます。私の最初の JavaScript コードは巨大なので、問題があると思われるものだけを抽出しています。ここに記載されているアドバイスと電話の手順に従っています。

私は大きな問題を抱えています。これが動作です。問題は次のコードに由来します。

 var r = Backbone.Router.extend
 router: ...    
    "page": "pageDisplay"
 ...
 pageDisplay: function(){
    c = new AView();      // Backbone.View    ...fetch() data...   
    $(c.el).page();       // Call to JQM to add its extra stuff; seems done correctly
    $.mobile.changePage( "#" + c.id, {changeHash: false});       // line 50
 }

のリンクを<a href="#page" >たどると、ちゃんと処理された「#page」というページにたどり着きます。しかし、一度クリックするrefreshと、同じルーター ルールによって間接的に再処理され、次のエラーが発生します。

キャッチされていない TypeError: 未定義のメソッド 'trigger' を呼び出せません

jquery モバイル開発コードをダウンロードしたところ、次のことがわかりました。

// JQM1.1.2 - 行番号 3772 ページ コンテナー内の特定のページを表示します。

  $.mobile.changePage = function( toPage, options ) {

  if ( isPageTransitioning ) { 
     pageTransitionQueue.unshift(arguments );
     return;      
  }
  var settings = $.extend( {}, $.mobile.changePage.defaults, options);

  // Make sure we have a pageContainer to work with.      
  settings.pageContainer = settings.pageContainer || $.mobile.pageContainer;
  // Make sure we have a fromPage.        
  settings.fromPage = settings.fromPage || $.mobile.activePage;
                                              // Line #3788   
  var mpc = settings.pageContainer,      // Line #3789        
      pbcEvent = new $.Event("pagebeforechange" ),
      triggerData = { toPage: toPage, options: settings };
  // Let listeners know we're about to change the current page.
  mpc.trigger( pbcEvent, triggerData );      // Line #3794

Uncaught TypeErrorLine #3794 が原因mpcですundefined。それで、JQM から、Chrome のインスペクターで、 issettings.fromPageundefinedissettings.pageContainerもわかりundefinedます。JQM は fromPage を想定できないため、更新を続行できないと思います。$mobile.changePage() で試したすべてのオプションが成功しませんでした。私はアイデアがありません。

更新/問題を再現するための最小限のオンライン サイト: apartindex、バグのある Web サイトにアクセス

どんな助けでも大歓迎です。

4

6 に答える 6

1

dextoInitルーター コードを呼び出す関数が呼び出されますが、これ$(document).ready()は jQuery モバイル ページが実際に正常にセットアップされたことを保証するものではありません。$.mobile.changePageただし、初期化されている jQuery Mobile に依存するルーター コード呼び出し。

mobileinitまたはに入れるとうまくいくpageinitはずです。

(残念ながら、コードを変更して簡単にテストすることはできません。)

于 2013-02-06T08:28:44.333 に答える
0

問題の原因は jquery-mobile バージョン 1.3.0 であることがわかりました。JSM 1.2.0 または 1.2.1 にフォールバックすると、「Uncaught TypeError: 未定義のメソッド 'trigger' を呼び出すことができません」という問題はなくなります。

ところで、私はバックボーンを使用していません。

于 2013-03-25T15:56:04.020 に答える
0

現時点ではこれで修正されますが、欠点もあります。下記参照。

$(document).bind("pageinit", function(){
   console.log('bindtomobileinit: event pageinit received');
   if ( !window.AppNode.router ){
      window.AppNode.router = new AppNode.singletons.router();
      console.log("mobileRouter.js: Starting b history");
      console.log('mobileRouter.js: About to launch Backbone history');
      Backbone.history.start();  
   }

});

に登録すると、 2 回解雇pageinitされるという奇妙な効果があります。Dom に 2 つのノードが追加されていることがわかります。デフォルトの「loading」(pageinit:1 に関連) と my (pageinit:2) です。そのため、「ブラウザの更新をクリック」すると、私の状況では、予期しない jquery モバイル dom 要素 (待機中の JQM サークル アニメーションを表示するために作成されたデフォルト ページ) を作成する最初の を待つことになります。これにより、ルーターの作成がトリガーされ、バックボーンが許可されます。 history 呼び出しは、私の "" ホームページを処理します。2 番目は 1 回だけ実行するため、設定に干渉しません。jquery mobile divdata-role pagepageinitpageinit

この設定には本当にがっかりしました。ある種の仕事をするので、私は今のところこの質問を残します。

于 2013-02-06T19:14:10.263 に答える
0

jqm 1.3.2 の 4042 行で参照されているように、ページ データ プロパティを「data-role」から「data-mobile-page」に変更することで、この問題を解決できました。

fromPage.data( "mobile-page" )._trigger( "beforehide", null, { nextPage: toPage } );
于 2013-10-24T03:02:34.803 に答える
0

設定

$.mobile.autoInitializePage = true;

jquery モバイル構成ファイルの次のような場所:

$(document).on("mobileinit", function () {...});

役立つかもしれません。

于 2013-10-29T12:27:12.417 に答える