0

Я хочу вызвать функцию deleteMarker моего текущего вида, когда нажата кнопка «Назад» браузера. Я искал похожие вопросы, но никто не мог мне помочь.Магистраль: вызывается функция просмотра при нажатии кнопки «Назад» браузера

Текущий вид, что я хочу, функция deleteMarker при нажатии кнопки назад щелкают по телефону:

ev.views.Evento = Backbone.View.extend({ 
    map: 'null', 
    initialize: function(id){ 
     ..... 
    }, 
    // function that will call 
    deleteMarker: function(){ 
     this.marker.remove(); 
    },  
    render: function(id){ 
     ..... 
    } 

}); 

app.js

var ev = new Application(); 

ev.Router = Backbone.Router.extend({ 

    routes: { 
     "": "home", 
     "evento/:id" : "evento" 
    }, 
    home: function(){ 
     setTimeout(function(){ 
      $('#rightcolumn').html(new ev.views.Home_Eventos(ev.shell.map).el); 
     }, 0); 

    }, 
    evento: function(id){ 
     $('#rightcolumn').html(new ev.views.Evento(id).el);  
    } 
}); 

$(document).on('ready', function() { 
    ev.templateLoader.load(['shell', 'home_list_eventos', 'evento'], function() { 
     ev.shell = new ev.views.Shell({el: "#shell"}); 
     ev.router = new ev.Router(); 
     Backbone.history.start(); 
    }); 
}); 
+0

В ev.Router.home, почему вы вызываете 'setTimeout' с миллисекундным параметром 0? Мне кажется, что это побеждает точку 'setTimeout'. – 76484

+0

Я искал и нашел интересные обсуждения этого шаблона: http://stackoverflow.com/questions/779379/why-is-settimeoutfn-0-sometimes-useful – 76484

+0

http://stackoverflow.com/questions/14543245/browser- back-button-handling http://stackoverflow.com/questions/25806608/how-to-detect-browser-back-button-event-cross-browser Просто прослушайте событие в «Router» и вызовите событие Backbone, которое мнение может случиться, чтобы это работа. –

ответ

0

Я нашел решение этой проблемы: Backbone.js history 'on route change' event. Вот пошли мое решение:

ev.router.on("route", function(route, params) { 
    if(route == "home"){ 
     console.log("Different Page: " + route); 
     that.deleteMarker(); 
    } 

}); 

При нажатии на кнопку возврата браузера, он будет проверять, если маршрут является домом. Если это - то огонь функция или что вы хотите. Надеюсь, это поможет вам в будущем.

+0

Вы можете сделать это еще красивее, удалив элемент 'if' и подписавшись на событие« route: home ». – 76484

0

я хотел бы использовать .onpopstate функцию фильтрации событие, проверка является history.back(). Я не уверен, какой объект передан обратному вызову, поэтому проверьте, насколько структурированный фильтр «событие» является адекватным.

window.onpopstate = function(event) { 
    if(event == "Backbone.history.back()") triggersomething(); 
}; 

Дайте мне знать, если это будет работать. Надеюсь, поможет.

+0

извините, но ваше решение не работает в моем случае. Спасибо за Вашу поддержку. – seal