Javascript 在实例化时检查Video.js对象的更好方法?

Javascript 在实例化时检查Video.js对象的更好方法?,javascript,video.js,Javascript,Video.js,我正在深入研究面向对象的Javascript和Video.js。为了使自定义视频控件在每次加载页面时都出现,必须处理并重建缓存的video.js对象 我创建了以下脚本,可以正确检查缓存对象,但不确定是否有更好的方法,即不需要创建第二个全局变量的方法: <div class="video-wrapper"></div> <script> var VideoObj; var Continuum = function(container, el,

我正在深入研究面向对象的Javascript和Video.js。为了使自定义视频控件在每次加载页面时都出现,必须处理并重建缓存的video.js对象

我创建了以下脚本,可以正确检查缓存对象,但不确定是否有更好的方法,即不需要创建第二个全局变量的方法:

<div class="video-wrapper"></div>

<script>
    var VideoObj;

    var Continuum = function(container, el, shortName) {
        this.container = container;
        this.el = el;
        this.shortName = shortName;
    };

    Continuum.prototype = {
        /* Build up the <video> tag and and attributes */
        prepareVideo: function() {
            if(VideoObj) {
                VideoObj.dispose();
            }

            $(this.container).append($(this.el));

            $(this.shortName).attr({
                'id': 'video_1',
                'class': 'video-js vjs-default-skin',
                'controls': true,
                'poster': 'http://video-js.zencoder.com/oceans-clip.jpg',
                'preload': false
            });

            this.createVideoObject('video_1');
        },

        /* Instantiate the object with the Video.js call */
        createVideoObject: function(vidID) {
            _V_(vidID, {}, function () {
                this.vidID = VideoObj = videojs(vidID);

                this.vidID.src([
                  { type: "video/mp4", src: "http://video-js.zencoder.com/oceans-clip.mp4" },
                  { type: "video/webm", src: "http://video-js.zencoder.com/oceans-clip.webm" },
                  { type: "video/ogg", src: "http://video-js.zencoder.com/oceans-clip.ogv" }
                ]);

                this.vidID.pause();
        });
    }
};

var vid = new Continuum('div.video-wrapper', '<video/>', 'video');
vid.prepareVideo();

var-VideoObj;
var Continuum=函数(容器、el、短名称){
this.container=容器;
this.el=el;
this.shortName=shortName;
};
Continuum.prototype={
/*建立标签和属性*/
prepareVideo:函数(){
如果(视频对象){
VideoObj.dispose();
}
$(this.container).append($(this.el));
$(this.shortName).attr({
'id':'video_1',
'class':'video js vjs default skin',
“控制”:正确,
‘海报’http://video-js.zencoder.com/oceans-clip.jpg',
“预加载”:false
});
这个.createVideoObject('video_1');
},
/*使用Video.js调用实例化对象*/
createVideoObject:函数(vidID){
_V_(vidID,{},函数(){
this.vidID=videobj=videojs(vidID);
this.vidID.src([
{类型:“视频/mp4”,src:http://video-js.zencoder.com/oceans-clip.mp4" },
{类型:“视频/webm”,src:http://video-js.zencoder.com/oceans-clip.webm" },
{类型:“视频/ogg”,src:http://video-js.zencoder.com/oceans-clip.ogv" }
]);
this.vidID.pause();
});
}
};
var vid=新的连续体('div.video-wrapper','video');
参阅prepareVideo();

您可以轻松检查videojs是否以这种方式加载:

videojs.getAllPlayers().length
如果为0,则可以重建它

另一种方法是迭代

videojs.getAllPlayers()

并在重建前进行处理

如果页面每次都完全重新加载,那么应该没有理由说明播放器已经存在。这个例子中是否缺少任何细节,比如在ajax驱动的javascript应用程序中,整个页面没有加载到每个新页面上,例如Angular或Ember?heff,是的,上面的片段是通过ajax加载的。我已经将几个HTML片段分解成模板,加载到index.HTML文件中。这是唯一一个有视频被渲染的,这就是为什么我会这样写。