Javascript 使用Backbone.js中的back按钮后多次触发事件

Javascript 使用Backbone.js中的back按钮后多次触发事件,javascript,backbone.js,dom-events,javascript-framework,Javascript,Backbone.js,Dom Events,Javascript Framework,我正在构建一个主干应用程序,我遇到了这个奇怪的问题。在A州(路线:),我有这样一个视图: var view = Backbone.View.extend({ events : { "click a.continue" : "next" }, next : function(e) { //Some stuff Backbone.history.navigate("/page2"); } }); 一旦我用“contin

我正在构建一个主干应用程序,我遇到了这个奇怪的问题。在A州(路线:),我有这样一个视图:

var view = Backbone.View.extend({
    events : {
         "click a.continue" : "next"
    },

    next : function(e) {
       //Some stuff
       Backbone.history.navigate("/page2");
    }
});
一旦我用“continue”类单击锚点,我就会被重定向到状态B(路由:“/page2”)。如果我点击浏览器的后退按钮,然后点击锚,我注意到下一个函数会被触发两次。事实上,如果我继续来回,事件被触发的次数会不断增加


有什么线索吗?

你看到了一个僵尸的画面

其要点是,当您实例化并显示第二个视图(“状态B”)时,您并没有处理第一个视图。如果有任何事件绑定到视图的HTML或视图的模型,则需要在关闭表单时清除这些事件

我在这里写了一篇详细的博客文章:


请务必阅读评论,因为“Johnny O”提供了一个我认为非常出色的替代实现。

我也有同样的问题,解决方案是

    App.Router = Backbone.Router.extend({
    routes: {
        "fn1": "fn1",
        "fn2": "fn2"
    },
    stopZombies: function(objView){
        if(typeof objView === "object"){
            objView.undelegateEvents();
            $(objView.el).empty();
        }
    },
    fn1: function(){

        this.stopZombies(this.lastView);

        var view1 = new App.v1();
        this.lastView = view1;
    },
    fn2: function(){

        this.stopZombies(this.lastView);

        var view2 = new App.v2();
        this.lastView = view2;
    }
});

将最后一个execute视图存储在this.lastView中,然后stopZoombies()从该视图中删除事件。

谢谢Derick,这篇文章写得很好。我还发现,您可以简单地执行$(view.el).unbind()之类的操作;在某些情况下,我不知道这是哪种语言。但它解决了我的问题。谢谢:-)+1