Ошибка: Ошибка вызова метода в NPObject!с Youtube jsapi - PullRequest
0 голосов
/ 19 мая 2011

Я делаю видеоплеер с использованием JQuery и YouTube JS API, у меня есть различные методы для управления объектом проигрывателя 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" - это селектор jquery объекта yt player. Я вызываю метод setVolume из экземпляра player-controll и работает. например:

        // 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 голосов
/ 20 мая 2011

Во-первых, извините за мой английский, я транслирую это с помощью Google traslate.

Не было проблем с Youtube API или jQuery.

Когда я получаю вызываемый метод, я каждый между элементами "this ", (селектор JQuery), переданные параметры не находятся в правильном контенте.

Я изменяю это на:

$.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, отправляющий элемент в качестве параметра, когда он переопределил целочисленное значение.

Теперь аргументы находятся в правильном контексте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...