Подтвердить что ты не робот

Удаление удаленной копии

Я создаю одностраничное приложение, и я совершенно новичок в магистрали. У меня возникла проблема с созданием нескольких представлений, которые используют один и тот же 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.

Я думаю, что есть простое решение? Я хочу повторно использовать одну и ту же оболочку и удалять только ее вид, а не сама оболочка.

4b9b3361

Ответ 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;
}

Лично я предпочитаю это, поскольку он устраняет необходимость вставлять элементы-оболочки, которые не имеют реального использования.