2014-11-06 69 views
0

在Backbone視圖中,是否有可能延遲對錨點href的點擊執行,直到ajax調用完成?延遲href執行點擊直到ajax調用後

我需要的是:

  1. 用戶點擊一個href;
  2. 點擊,觸發ajax調用;
  3. 如果ajax調用成功,那麼應該執行href;

我做了測試,加入到骨幹視圖的方法,連接到錨定:

clickNext: function(e){ 

     setTimeout(function(){ 
      console.log("test"); 
     }, 5000); 

不幸的是,結束超時之前執行的HREF。

我之所以需要這個,是因爲我想開發一個嚮導,其中每個頁面都有一個單獨的url;我在每個頁面負載上執行對localstorage的檢查,並且在每次「下一步」單擊時執行持久性存儲(Ajax)。

+0

你可以阻止默認的事件處理,後來經過JS打開HREF。儘管如果延遲太大,我肯定會觸發瀏覽器彈出窗口阻止程序。 (也許不是'位置') – Yoshi 2014-11-06 12:12:02

回答

1

要防止原始點擊觸發位置更改,請使用e.preventDefault(),然後可以在ajax調用成功時使用done或success回調來手動更改窗口哈希位置。

myApp.Views.ExampleView = Backbone.View.extend({ 
    el: "#myView", 
    events: { 
     "click a": "handleLink" 
    }, 
    handleLink: function (e) { 
     e.preventDefault(); 
     var link = $(e.currentTarget).attr('href'); 
     $.ajax("/echo/json/") 
      .done(function() { 
      location.hash = link 
     }) 
    } 
}); 

var myView = new myApp.Views.ExampleView(); 

小提琴 - http://jsfiddle.net/leighking2/hjcg77h2/

+0

這確實是一個解決方案,謝謝。 – Trace 2014-11-06 21:32:26