【问题标题】:Cleaning views with backbone.js?用backbone.js 清理视图?
【发布时间】:2012-01-31 12:27:44
【问题描述】:

我正在开发一个主干.js 应用程序,并且已经达到了我有许多路由器和视图代表我的应用程序每个部分的地步。在下面的简化路由器示例中,我有两个位置; account & users.

每个位置的两个视图都将其内容呈现给一个名为#appcontainer 的相互元素。我的常识是,在启动另一个视图之前,我应该确保 remove 每个视图,以防止绑定、DOM 和诸如此类的冲突。

但由于我无法确定是否已创建视图,因此我无法从路由器内部或视图中显式调用 previousView.remove()

$(this.el).empty() 添加到每个视图的构造函数中是否足以从 DOM 中清除任何最终的先前绑定和元素?

这是路由器示例?

var myRouter = Backbone.Router.extend({

    routes: {
        "account": "account",
        "users": "users"
    },

    account: function() {
        view = new AccountView({});
        view.render();
    },

    users: function() {
        view = new UserView({});
        view.render();
    }

});

【问题讨论】:

    标签: jquery dom backbone.js


    【解决方案1】:

    我有一个非常简单的实现,我现在才开始我的应用程序,不知道从长远来看它会如何保持,但它看起来像这样:

    编辑:这是整个文件的样子。 this.render 将是 myRouter 的另一个函数。

    var myRouter = Backbone.Router.extend({
        routes: {
            'path/to/account' : 'account',
            'path/to/users': 'users'
        }
    
        account: function() {
            view = new AccountView({});
            this.render(view);
        },
    
        users: function() {
            view = new UserView({});
            this.render(view);
        },
    
        render: function (view) {
            //Close the current view
            if (this.currentView) {
                this.currentView.remove();
            }
    
            //render the new view
            view.render();
    
            //Set the current view
            this.currentView = view;
    
            return this;
        }
    });
    

    【讨论】:

    • 嗨!感谢您的回答。运行 jQuery 的 .remove() 方法是否会在视图上与主干 .remove() 分开?
    • Backbone 的 .remove() 只是 jquery 的 .remove() 的别名,因此出于这些目的,它们是相等的。
    • @MrGrigg 您能澄清一下渲染方法的用途吗?看起来它进入了路由器本身,但我想确保...... 我真的很喜欢这段代码的外观,乍一看,这似乎是一种很好的结构化方式一个应用程序.
    • 这是一个很好的问题,艾默生,我已经更新了答案以包含整个文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 2023-03-10
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多