Очистка просмотров с помощью backbone.js? - PullRequest
5 голосов
/ 31 января 2012

Я работаю над 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 Ответ

11 голосов
/ 04 февраля 2012

У меня очень простая реализация, я только сейчас запускаю свое приложение и не знаю, как это будет продолжаться в долгосрочной перспективе, но это выглядит примерно так:

Редактировать: Вот как будет выглядеть весь файл. 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;
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...