2012-05-04 16 views
0

私はバックボーンを使ってすべての自分のビューを作成しています。私の見解の中には、リソースを大量に消費するものがあり、テンプレートに読み込むのに時間がかかります。だから、いくつかの線をクリックすると、私は最初にロードオーバーレイを表示し、ビューがレンダリングされるときに削除したいと思います。Phonegap iOSアプリ、Jquery Clickイベント

$('.class').live('click', function(){ 
    $("#loading").fadeIn(); 
    // this changes the url and then the view is called. 
}); 

しかし、問題は読み込みがビューがレンダリングされた後だけになることです。どうしてこれなの?ここのイベントパターンは何ですか?リンクをクリックすると、最初にURLをロードしてから、クリックコールバック内のものだけがロードされます。 も、このことは同じことをして:

$('.content a').click(function() { 
    var f = $(this); 
    $("#loading").show(); 
    Backbone.history.navigate(f.attr("href"), true); 
    return false; 
}); 
+0

'.class'の後に引用符を忘れました。また、jQuery 1.8+は 'live()'関数を非推奨にしています。代わりに 'on()'を使用してください –

+0

引用はちょうど例であり、notgのコードの問題ではありません。私も試してみます – Harry

+0

申し訳ありません。私はその記事を編集した。おそらく '$(document).on( 'click'、 '。class'、function(){});を使用する必要があることに注意してください。 ' –

答えて

0

これは、イベントの可能性配列である。

  1. をクリックして起こります。
  2. $("#loading").fadeIn();が呼び出されます。
  3. URLを変更すると、ルーターがアクティブになります。
  4. ビューがアクティブになり、レンダリングを開始します。
  5. ビューのレンダリングが終了しました。
  6. ブラウザが再び制御を開始し、作業バックログのクリアを開始します。特に、ブラウザはからfadeInになります。たとえば、

、何をこのような単純なものを参照してください。

$('button').click(function() { 
    $('div').after('<p>Loading...</p>'); 
    for(var i = 0; i < 10000; ++i) 
     $('div').text(i); 
});​ 

デモ:http://jsfiddle.net/ambiguous/sEvv5/

あなたは10000まで、またはコンピュータがどのくらいの速に応じて、ダウンしていることを調整する必要があるかもしれません。

あなたが行う必要があるのは、#loadingを置いたときから高価なレンダリングのレンダリングを開始するまでの間にブラウザに手を戻すことです。一般的な方法は、タイムアウトがゼロのsetTimeoutを使用することです。例えば:

$('button').click(function() { 
    $('div').after('<p>Loading...</p>'); 
    setTimeout(function() { 
     for(var i = 0; i < 10000; ++i) 
      $('div').text(i); 
    }, 0); 
});​ 

デモ:http://jsfiddle.net/ambiguous/qd9Ly/

あなたのケースでは、setTimeout// this changes the url and then the view is called.一部を入れてみてください。