私有方法作为字符串返回

时间:2011-04-12 09:32:12

标签: jquery plugins methods

我正在开发一个简单的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 个答案:

答案 0 :(得分:4)

您必须使用括号methods._generateID()调用函数。

答案 1 :(得分:0)

你在哪里打电话给这个职能?我只看到:

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

也许你的意思是:

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

函数调用采用return_value = function_name(arg_list);

形式

答案 2 :(得分:0)

你来自哪里。在插件内或从外面打电话。

Headshota的answer用于调用插件中的方法。

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

注意,将方法名称作为第一个字符串参数传递,然后传递其他参数。