Звонок не определен - PullRequest
       27

Звонок не определен

2 голосов
/ 26 апреля 2011

Я пытаюсь настроить свой плагин так, чтобы он принимал функцию обратного вызова внутри в качестве аргумента опции:

(function($) {

    $.fn.MyjQueryPlugin = function(options) {
        var defaults = {
            onEnd: function(e) {}
        };

        var settings = $.extend({}, defaults, options);

        return this.each(function() {
            // do stuff (complete() gets called here)

        });
    };

    function complete(e){
        settings.onEnd.call(this); // <- the error?
    }

})(jQuery);

Но я получаю сообщение об ошибке, что call () не определена. Что не так с моим кодом?

хорошо, я изменил это с:

(function($) {

    $.fn.MyjQueryPlugin = function(options) {
        var defaults = {
            onEnd: function(e) {}
        };

        var settings = $.extend({}, defaults, options);

        var complete = function(e){
          settings.onEnd.call(this); // <- the error?
        }


        return this.each(function() {
            // do stuff (complete() gets called here)

        });
    };   

})(jQuery);

и ошибка все еще там ...

Ответы [ 3 ]

3 голосов
/ 26 апреля 2011

Вы пытаетесь сослаться на settings вне функции, в которой оно определено. Вы определили settings как локальную переменную в функции, которую вы назначаете для $.fn.MyjQueryPlugin, но затем вы используете ее из функции, которая не закрывается над этой локальной переменной.

Вы можете создать новую complete функцию для каждого вызова MyjQueryPlugin, которая закрывается на settings:

(function($) {

    $.fn.MyjQueryPlugin = function(options) {
        var defaults = {
            onEnd: function(e) {}
        };

        var settings = $.extend({}, defaults, options);

        return this.each(function() {
            // do stuff (complete() gets called here)

        });

        // `complete` now closes over `settings`
        function complete(e){
            settings.onEnd.call(this); // <- the error?
        }
    };

})(jQuery);

... но, конечно, это включает создание функции. Может быть, это нормально, зависит от того, что делает плагин.

Альтернативно, передайте settings в complete в качестве аргумента.

2 голосов
/ 26 апреля 2011

settings не входит в область действия complete().

1 голос
/ 26 апреля 2011

переменные настройки выходят за рамки полной функции. Поместите полную функцию в функцию, в которой вы определили настройки.

$.fn.MyjQueryPlugin = function(options) {
    var defaults = {
        onEnd: function(e) {}
    };

    function complete(e){
        settings.onEnd.call(this); // <- the error?
    }

    var settings = $.extend({}, defaults, options);

    return this.each(function() {
        // do stuff (complete() gets called here)

    });
};
...