0

我读了很多关于它的内容,但我所理解的不起作用。

我正在使用这个jquery 插件样板

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

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

我想把这个方法称为 outsise,像这样:

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

但不起作用,请点击此处的文件链接,让您更好地了解我的问题:http: //jsfiddle.net/TCxWj/

4

1 回答 1

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);

    }

};

然后它会选择你的方法。

希望能帮助到你。

于 2013-08-07T20:37:00.350 回答