хребет удалить вид удалить Эл


Я создаю одностраничное приложение, и я совершенно новичок в backbone. У меня есть проблема с созданием нескольких представлений, которые используют одну и ту же оболочку-div.

Моя настройка:

Я добавил функцию close для всех представлений:

Backbone.View.prototype.close = function(){
    this.remove();
    this.off();
    if (this.onClose){
        this.onClose();
    } 
}

У меня есть оболочка-div, где я хочу отрисовывать представления, удалять их и отрисовывать новые. Итак, мой SetupView выглядит следующим образом:

app.SetupView = Backbone.View.extend({
    el: '#my_view_wrapper',
    ...
});

Из функции, в которой я меняю виды, я закрываю текущий (открытый) вид, как это:

var v = this.model.get('view');
v.close();

Вопрос

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

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

2 24

2 ответа:

В вашем сценарии не используйте существующий элемент DOM в качестве значения "el". Костяк создаст элемент для вас. При создании экземпляра представления можно выполнить следующие действия, чтобы присоединить его к существующему элементу обертывания.

$(viewName.render().el).appendTo('#my_view_wrapper');

Просто в качестве дополнения ( для дальнейшего использования): другой вариант-перезаписать подвиды remove так, чтобы он просто опустошал $el вместо удаления. Напр..

remove: function() {
      this.$el.empty().off(); /* off to unbind the events */
      this.stopListening();
      return this;
}

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