2

このサイトから jQuery プラグイン ボイラープレートを試してみました: 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();

この選択でメソッドを呼び出すにはどうすればよいですか?

4

1 に答える 1

7

It is because $('#wrapper') does not return an instance of the plugin, it returns a jQuery wrapper for the matched set of DOM elements which does not have the fooBar method.

If you want to call the plugin's public method, try:

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

The plugin instance is stored as data to the element with name 'plugin_' + pluginName, so:

  1. $('#wrapper').data('plugin_defaultPluginName') will return the instance of plugin named defaultPluginName
  2. .fooBar();fooBarプラグイン インスタンス内のメソッドを呼び出します
于 2013-08-07T12:26:36.080 に答える