2012-05-04 128 views
0

我正在使用backbone來創建我所有的視圖。我的一些觀點非常耗費資源,需要一段時間才能加載到模板中。所以當點擊一些lin時,我想首先顯示一個加載覆蓋圖並在視圖呈現時將其刪除。Phonegap iOS應用程序,Jquery Click events

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

但問題是,加載,但只有在視圖呈現後纔會出現。爲什麼是這樣?這裏的事件模式是什麼?就像當你點擊鏈接時,它首先加載的網址,然後只有點擊回調內的東西,導致它看起來如此。 即使有這個確實是相同的:

$('.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

引用只是在這個例子中,它不是代碼慢的問題。我也會嘗試 – 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/

在你的情況下,嘗試把// this changes the url and then the view is called.部分在setTimeout

相關問題