хребет удалить вид удалить Эл
Я создаю одностраничное приложение, и я совершенно новичок в 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 ответа:
В вашем сценарии не используйте существующий элемент 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; }
Лично я предпочитаю это, так как это устраняет необходимость вставлять элементы оболочки, которые не имеют реальной пользы.