调用jquery插件的公共方法

时间:2013-08-07 12:20:50

标签: jquery plugins methods call public

我在本网站上尝试了一个jQuery Plugin Boilerplate:jQuery_boilerplate,但是我无法调用公共方法fooBar。 我的实现看起来像:

/**
 * jQuery lightweight plugin boilerplate
 * Original author: @ajpiano
 * Further changes, English comments: @addyosmani
 * More further changes, German translation: @klarstil
 * Licensed under the MIT license
 */
;(function ( $, window, document, undefined ) {
    "use strict";

    var pluginName = 'defaultPluginName',
        defaults = {
            propertyName: "value"
        };    

    var privateMethod = function() {
    };

    function Plugin( element, options ) {

        this.element = element;
        this.options = $.extend( {}, defaults, options) ;

        this._defaults = defaults;
        this._name = pluginName;

        this.init();

    }

    Plugin.prototype.init = function () {
    };

    Plugin.prototype.fooBar = function(someValue) {
        var fooBarModifier = 3;

        function privateFooBar(someValue) {
            return someValue * fooBarModifier;
        }

        someValue = privateFooBar(someValue);
        return someValue;
    };

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

例如,我使用这样的插件:

$('#wrapper').defaultPluginName();

我试着像这样调用这个方法:

$('#wrapper').fooBar();

但是我的控制台给了我一个错误:

  

TypeError:$(...)。fooBar不是函数$('#wrapper')。fooBar();

如何在此选择中调用方法?

1 个答案:

答案 0 :(得分:7)

这是因为$('#wrapper')没有返回插件的实例,它返回一个jQuery包装器,用于匹配的DOM元素集,它没有fooBar方法。

如果您想调用插件的公共方法,请尝试:

$('#wrapper').data('plugin_defaultPluginName').fooBar();

插件实例作为数据存储到名为'plugin_' + pluginName的元素中,因此:

  1. $('#wrapper').data('plugin_defaultPluginName')将返回名为defaultPluginName
  2. 的插件实例
  3. .fooBar();调用插件实例
  4. 中的方法fooBar