我正在使用JQuery和YouTube JS API制作视频播放器,我使用varios方法来控制youtube播放器对象,例如:
setVolumen: function (value) {
if (value < 0 || value > 100) {
this.throwError("Volumen inválido: "+ value);
return;
}
this.volume = value;
this.elements.player.each(function () {
if (typeof this.setVolume != "undefined") {
this.setVolume(value);
}
});
},
“this.elements.player”是yt player对象的jquery选择器。我从player-controll实例调用setVolume方法并且工作。例如:
// This is inside a method of controller class
// and self is a reference to "this" in method context
this.celements.volume.slider({
max: 100,
value: 100,
change: function (event, obj) {
self.setVolumen(obj.value);
}
});
如果我移动滑块元素,这没有问题,我从jquery选择器调用一个方法:
$( '#播放列表')UplayList( 'setVolumen',80);
抛出“错误:在NPObject上调用方法时出错!”
对象存在,并且setVolume未定义。我不明白。
在Jquery中有一个:
$.fn.extend({
UplayList: function (options) {
this.each(function () {
if ($(this).data('uplaylistId')) {
var instance = $.playList.instances[$(this).data('uplaylistId')];
instance[options].apply( instance, Array.prototype.slice.call( arguments, 1 ));
} else {
var instance = new $.playList(this, options);
var id = instance.elements.player.attr('id');
$(this).data('uplaylistId',id);
}
});
}
});
答案 0 :(得分:0)
首先,我的englesh,我用谷歌traslate进行翻译。
Youtube API或jQuery没问题。
当我重新调用所调用的方法时,我每次都注意“this”,(JQuery选择器)的元素,传递的选项,不是正确的contenxt。
我将其更改为:
$.fn.extend({
UplayList: function (method) {
if ($(this).data('uplaylistId')) {
var instance = $.playList.instances[$(this).data('uplaylistId')];
} else {
var instance = new $.playList(this, method);
var id = instance.elements.player.attr('id');
$(this).data('uplaylistId',id);
return $(this);
}
if ( instance[method] ) {
return instance[method].apply( instance, Array.prototype.slice.call( arguments, 1 ));
} else {
$.error( 'Method ' + method + ' does not exist' );
}
}
});
那些变量“arguments”内容作为第二个元素,一个对象。所以当调用一个整数值时,我调用setVolume方法将一个元素作为参数发送。
现在参数在正确的上下文中。