我在本网站上尝试了一个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();
如何在此选择中调用方法?
答案 0 :(得分:7)
这是因为$('#wrapper')
没有返回插件的实例,它返回一个jQuery包装器,用于匹配的DOM元素集,它没有fooBar
方法。
如果您想调用插件的公共方法,请尝试:
$('#wrapper').data('plugin_defaultPluginName').fooBar();
插件实例作为数据存储到名为'plugin_' + pluginName
的元素中,因此:
$('#wrapper').data('plugin_defaultPluginName')
将返回名为defaultPluginName
.fooBar();
调用插件实例fooBar
醇>