我正在尝试将 Select2 小部件与 Backbone Marionette 视图集成。我的简单设置使用 Marionette.CollectionView 创建和处理选择标签,使用 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。
只要处理选择标记 (SelectCollectionView) 的视图已添加到 DOM,此设置就可以很好地工作。如果不是这种情况,Select2 的附加标签就会丢失,因为它们不是 SelectCollectionView 的 $el 的一部分,因此不会添加到 DOM 中。
我想知道如何优雅地解决这个问题?可以添加一个额外的 div 容器并在其中渲染所有内容,但这会为脚本和 DOM 生成额外的代码。这也使我的观点不那么通用。我只是希望有一个我没有想到的更好的解决方案。