Суть этого вопроса заключается в том, что если я использую код Backbone.js для очистки моих представлений (т. Е. Для предотвращения представлений о зомби), то я не могу установить элемент если я нажму кнопку «Назад» в браузере, и поэтому представление не будет отображаться правильно в ситуациях, когда я нажимаю кнопку «Назад».Как запустить конструктор View при использовании кнопки назад браузера
Подробности
У меня есть PostsView, который отображает список сообщений. В конструкторе я называю SetElement, а затем сделать каждый элемент списка с помощью нескольких PostListViews
export class PostsView extends Backbone.View{
constructor(options){
this.setElement($('#main'), true)
super()
this.render()
}
addEachPost(model){
new PostListView({model: model });
}
render(){
this.collection.each(this.addEachPost, this);
}
Если я нажимаю один из PostListViews, то маршрутизатор нагрузки, PostListView на страницу, и если я нажимаю кнопку назад, он перезагружает представление Posts на странице, но только если я не очистил вид Posts. Например, с помощью этого кода ниже (который не очищает просмотры) я могу нажать кнопку «Назад», а затем еще одну ссылку и так далее, и он продолжает загружать все в порядке, но это будет в конечном итоге создать зомби, потому что я не очистки мнения
маршрутизатор
export class MyRouter extends Backbone.Router{
constructor(options){
'': 'renderList',
'post/:id': 'showPost'
}
renderList(){
new PostsView({collection: this.collection)};
}
showPost(id){
//code ommitted
new PostView({model: modle})
}
}
Итак, с приведенным ниже кодом я ввел некоторый часто используемый код (который я видел в других приложениях Backbone), чтобы предотвратить появление зомби, но теперь, если я это сделаю, когда я нажму кнопку «Назад», PostView doesn «т получить оказанные страницы
кодмаршрутизатора, чтобы очистить зомби
changeView(view){
if (this.currentView){
this.currentView.close();
}
this.currentView = view;
}
в маршрутизаторе, я затем загрузить взгляды по телефону
`this.changeView(new PostsView({collection: this.collection)});`
Однако, если я делаю это, я могу загрузить PostsView изначально, но если я нажму на один из членов списка, а затем на задний план, вид Posts не загружается на страницу. Я заметил из проверки консоли, что в этой ситуации (после нажатия кнопки «Назад») el
не установлен на #main
, поэтому он не попадает на страницу. В коде, где я НЕ Убираю виды зомби, el
по-прежнему установлен на #main
, если я нажму кнопку «Назад» - очевидно, что мой код для очистки представлений зомби делает что-то, чтобы предотвратить #main being если я нажму кнопку «Назад». Итак, очистив зомби, я удалил el, и он не будет установлен снова, потому что конструктор не запускается, когда я нажимаю кнопку back
.
Вопрос: существует ли какой-либо способ использования кода маршрутизатора, который очищает представления зомби, но в то же время, чтобы гарантировать, что конструктор запускается, когда я нажимаю кнопку «Назад» в браузере? Если конструктор для представления запускается, даже когда я нажимаю кнопку «Назад», то я считаю, что он установит элемент (как это было при загрузке страницы)
Не могли бы вы исправить ваш вопрос: предложение, кажется, остановиться посередине на '[.. .] the vi' (просто отредактируйте, не комментируйте «отредактированный», спасибо :) –
@ try-catch-finally ok, я исправил эту часть и попытался уточнить больше в других местах. Спасибо, что указали это. – Leahcim