Backbone:单击浏览器后退按钮时调用视图的功能

时间:2014-12-23 00:28:56

标签: javascript backbone.js backbone-views backbone-events backbone-routing

当我点击浏览器的后退按钮时,我想调用当前视图的函数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();
    });
});

2 个答案:

答案 0 :(得分:0)

我会使用.onpopstate函数过滤事件,检查是否已触发history.back()。 我不确定将哪个对象传递给回调,因此请检查“事件”的结构化过滤器是否足够。

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

让我知道它是否有效。希望它有所帮助。

答案 1 :(得分: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();
   }

});

当我按下浏览器的后退按钮时,它将检查路线是否在家。如果它然后发射功能或任何你想要的。我希望将来能帮助你。