我读了很多关于它的内容,但我所做的并没有奏效。
我正在使用此jquery plugin boilerplate。
我有一个名为“defaultPluginName”的插件,我在插件中有一个公共方法:
sayHey: function(){
alert('Hey!');
}
我希望将这种方法称为“超出此类方法”:
$('#test').defaultPluginName('sayHey');
但是无法正常工作,请点击此处的fidle链接,以便更好地了解我的问题: http://jsfiddle.net/TCxWj/
答案 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);
}
};
然后它会拿起你的方法。
希望它有所帮助。