Очистка просмотров с помощью 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;
}
});