Очистка просмотров с помощью backbone.js?

Я работаю над backbone.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();
    }

});

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;
    }
});
Другие вопросы по тегам