错误:在NPObject上调用方法时出错!与Youtube jsapi

时间:2011-05-18 21:57:47

标签: javascript jquery youtube

我正在使用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);
            }

        });
    }
});

1 个答案:

答案 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方法将一个元素作为参数发送。

现在参数在正确的上下文中。