2014-11-06 3 views
0

В представлении «Магистраль» можно ли задержать выполнение щелчка на якоре href до тех пор, пока не будет завершен вызов ajax?Задержка выполнения href щелчка до вызова ajax

Что бы я требую:

  1. пользователя щелкает HREF;
  2. По щелчку запускается вызов ajax;
  3. Если вызов ajax успешный, только тогда должен быть выполнен href;

Я сделал тест, добавление метода к представлению Backbone, связанный с якорем:

clickNext: function(e){ 

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

К сожалению, HREF выполняется до того, как тайм-аут был закончен.

Причина, по которой мне это нужно, заключается в том, что я хочу разработать мастер, в котором каждая страница имеет отдельный URL-адрес; Я выполняю проверки с localstorage на каждой pageload, и я выполняю постоянное хранилище (Ajax) на каждом клике «Далее».

+0

Вы можете предотвратить обработку событий по умолчанию, а затем открыть HREF через JS. Хотя если задержка слишком велика, я уверен, что блокировщик всплывающих окон браузеров будет запущен. (возможно, не с 'location') – Yoshi

ответ

1

Чтобы предотвратить первоначальный щелчок, связанный с изменением местоположения, используйте e.preventDefault(), затем вы можете использовать выполненный или успешный вызов, когда успешный вызов ajax был успешным, чтобы вручную изменить местоположение хэша окна.

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

Смежные вопросы