我有两个主干观点:
我的网站上有多种类型的视频,有些视频基于其data
属性(即data-has-overlay
,data-is-expanded
)有不同的行为;
我想在VideoView上初始化它们,然后检查传递给它的元素,并在适当时委托给子视图。
问题:
BB代码示例:
var VideoView = Backbone.View.extends({
initialize: function ( options ) {
// something here to check the el and create ExpandedVideoView if appropriate
if ( this.$el.data('is-expanded') ) {
// Create ExpandedVideoView instead..?
}
},
foo: function () { return 'foo'; }
});
var ExpandedVideoView = VideoView.extends({
initialize: function () {},
bar: function () { return 'bar'; }
});
标记看起来如下所示:
<div class="Video" data-src="..." data-is-expanded data-has-controls>...</div>
<div class="Video" data-src="..." data-has-controls>...</div>
<div class="Video" data-src="..." data-is-expanded>...</div>
视频是在类似于以下功能的情况下创建的:
self.$el.find('.Video').each(function ( index, el ) {
self.videoViews.push( new VideoView({ el: el }) );
});
(其中self
是管理其子视图的父视图)
答案 0 :(得分:2)
Backbone.js内置了什么来促进这一点?
总之没有。但是如果你想要生成一个“列表视图”类型的视图,根据类型对它的项目进行不同的格式化,那么你可以查看Backbone.Marionette的CollectionView并从中得到一些灵感。
Marionette的集合视图不支持立即渲染不同的子视图,但您可以轻松覆盖基类中的方法来执行此操作。
如果您想要并需要更复杂的视图结构,那么绝对值得一看Marionette。