Удаление удаленной копии
Я создаю одностраничное приложение, и я совершенно новичок в магистрали. У меня возникла проблема с созданием нескольких представлений, которые используют один и тот же wrapper-div.
Моя настройка:
Я добавил функцию закрытия ко всем представлениям:
Backbone.View.prototype.close = function(){
this.remove();
this.off();
if (this.onClose){
this.onClose();
}
}
У меня есть wrapper-div, где я хочу визуализировать представления, удалять их и создавать новые. Поэтому мой SetupView выглядит так:
app.SetupView = Backbone.View.extend({
el: '#my_view_wrapper',
...
});
Из функции, где я меняю виды, я закрываю текущее (открытое) представление следующим образом:
var v = this.model.get('view');
v.close();
Вопрос
Моя проблема заключается в том, что я имею несколько видов, используя один и тот же wrapper-div. Но когда я закрываю представление, этот wrapper-div кажется удаленным, и следующее представление, которое я пытаюсь создать, не может найти этот div.
Я думаю, что есть простое решение? Я хочу повторно использовать одну и ту же оболочку и удалять только ее вид, а не сама оболочка.
Ответы
Ответ 1
В вашем сценарии не используйте существующий элемент DOM в качестве значения "el". Магистраль создаст этот элемент для вас. Когда вы создаете экземпляр своего представления, вы можете сделать следующее, чтобы прикрепить его к существующему оберточному элементу.
$(viewName.render().el).appendTo('#my_view_wrapper');
Ответ 2
Точно так же, как добавление (для последующей ссылки): другой вариант - перезаписать subviews remove
, чтобы он просто пустил $el
вместо его удаления. Например.
remove: function() {
this.$el.empty().off(); /* off to unbind the events */
this.stopListening();
return this;
}
Лично я предпочитаю это, поскольку он устраняет необходимость вставлять элементы-оболочки, которые не имеют реального использования.