Закрытый метод возвращается как строка - PullRequest
1 голос
/ 12 апреля 2011

Я разрабатываю простой плагин jquery, и у меня возникают трудности с настройкой структуры метода. Может ли кто-нибудь, пожалуйста, просветить меня. Я использую структуру плагина, как описано в официальной документации Jquery Authoring.

Проблема, с которой я сталкиваюсь, заключается в том, что при вызове закрытой функции _generateID функция возвращает текст функции (function () {return this ..) вместо hi.

(function( $ ){

    var methods = {
        init : function( options ) {
            return this.each(function() {

            });
        },

        _generateID : function() {
            return this.each(function() {
                return 'hi';
            });
        },

        create : function( options ) {
            return this.each(function() {
                var settings = {
                    'id' : methods._generateID,
                };
                if ( options ) { $.extend( settings, options ); }
                $('<div>', {
                    id : settings.id,
                }).appendTo(this);              
            });
        },

        destroy : function( id ) {
            return this.each(function(){
                $(window).unbind('#'+id);
                $('#'+id).remove();
            });
        }
    };

    $.fn.workzone = function( method ) {
        if ( methods[method] ) {
            return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
        } else if ( typeof method === 'object' || ! method ) {
            return methods.init.apply( this, arguments );
        } else {
            $.error( 'Method ' +  method + ' does not exist on jQuery.workzone' );
        }    
    };

})( jQuery );

Ответы [ 3 ]

4 голосов
/ 12 апреля 2011

Вы должны вызывать функцию с круглыми скобками methods._generateID().

0 голосов
/ 12 апреля 2011

Откуда вы звоните.Внутри плагина или звонка извне.

Ответ Headshota для вызова метода внутри плагина

$('div').pluginName('_generateID', arg0, arg1, ...); //Way to call a plugin method from outside out side plugin and pass arguements.

Обратите внимание: передача имени метода в качестве первого строкового аргумента, а затем других параметров.

0 голосов
/ 12 апреля 2011

Где вы вызвали функцию?Я вижу только:

var settings = {
   'id' : methods._generateID,
};

Возможно, вы имели в виду:

var settings = {
   'id' : methods._generateID(),
};

Вызовы функций принимают форму return_value = function_name(arg_list);

...