如何从外部调用公共方法jquery插件?

时间:2013-08-07 19:06:08

标签: jquery jquery-plugins

我读了很多关于它的内容,但我所做的并没有奏效。

我正在使用此jquery plugin boilerplate

我有一个名为“defaultPluginName”的插件,我在插件中有一个公共方法:

sayHey: function(){
  alert('Hey!');
}

我希望将这种方法称为“超出此类方法”:

$('#test').defaultPluginName('sayHey');

但是无法正常工作,请点击此处的fidle链接,以便更好地了解我的问题: http://jsfiddle.net/TCxWj/

1 个答案:

答案 0 :(得分:2)

您尝试调用的方法不公开,因此您需要更改插件才能从插件外部触发它。

请在此处查看如何执行此操作:https://github.com/jquery-boilerplate/jquery-boilerplate/wiki/Another-extending-jQuery-boilerplate

基本上你需要改变

$.fn[ pluginName ] = function ( options ) {
    return this.each(function() {
        if ( !$.data( this, "plugin_" + pluginName ) ) {
                $.data( this, "plugin_" + pluginName, new Plugin( this, options ) );
        }
     });
};

 $.fn[pluginName] = function ( arg ) {
    var args, instance;

    // only allow the plugin to be instantiated once
    if (!( this.data( 'plugin_' + pluginName ) instanceof Plugin )) {

        // if no instance, create one
        this.data( 'plugin_' + pluginName, new Plugin( this ) );
    }

    instance = this.data( 'plugin_' + pluginName );

    /*
     * because this boilerplate support multiple elements
     * using same Plugin instance, so element should set here
     */
    instance.element = this;

    // Is the first parameter an object (arg), or was omitted,
    // call Plugin.init( arg )
    if (typeof arg === 'undefined' || typeof arg === 'object') {

        if ( typeof instance['init'] === 'function' ) {
            instance.init( arg );
        }

    // checks that the requested public method exists
    } else if ( typeof arg === 'string' && typeof instance[arg] === 'function' ) {

        // copy arguments & remove function name
        args = Array.prototype.slice.call( arguments, 1 );

        // call the method
        return instance[arg].apply( instance, args );

    } else {

        $.error('Method ' + arg + ' does not exist on jQuery.' + pluginName);

    }

};

然后它会拿起你的方法。

希望它有所帮助。