【发布时间】:2015-02-06 11:31:16
【问题描述】:
我有 2 个主干视图:
- VideoView(扩展 Backbone.View)
- 扩展视频视图(扩展视频视图)
我的网站上有多种类型的视频,其中一些视频的行为基于其data 属性(即data-has-overlay、data-is-expanded);
我想在 VideoView 上将它们全部初始化,然后检查传递给它的元素并在适当的情况下委托给子视图。
问题:
- Backbone.js 中是否有任何内置功能来促进这一点?
- 是否有一个优雅的解决方案,或者我应该更改我的初始创建代码以在 DOM 级别创建正确的视图(即搜索具有特定数据属性的视频元素并相应地实例化)。
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 是管理其子视图的父视图)
【问题讨论】:
标签: javascript inheritance backbone.js constructor