Я пытаюсь интегрировать виджет Select2 с представлениями Backbone Marionette. Моя простая установка использует Marionette.CollectionView для создания и обработки тега select и Marionette.ItemViews для отображения тегов параметров.
В основном это выглядит так:
SelectCollectionView = Backbone.Marionette.CollectionView.extend({
itemView : SelectItemView,
tagName : "select",
onRender : function() {
this.$el.select2();
},
onClose : function() {
this.$el.select2("destroy");
}
}
SelectItemView = Backbone.Marionette.ItemView.extend({
tagName : "option",
render : function() {
// create the needed option tags
}
}
Как видите, я должен вызвать методы инициализации и уничтожения Select2 при рендеринге и закрытии, чтобы добавить необходимые дополнительные теги в DOM.
Эта установка работает очень хорошо, если представление, обрабатывающее тег select (SelectCollectionView), уже добавлено в DOM. Если это не так, дополнительные теги Select2 теряются, поскольку они не являются частью $el SelectCollectionView и, следовательно, не добавляются в DOM.
Интересно, как это изящно решить? Можно было бы добавить дополнительный контейнер div и визуализировать все внутри него, но это привело бы к созданию дополнительного кода для скрипта и модели DOM. Это также делает мой взгляд менее универсальным. Я просто надеюсь на лучшее решение, о котором я не думал.
onShow
вместоonRender
? - person David Sulc   schedule 30.05.2013