Call methods using jQuery Plugin design pattern
boilerplate, jquery
Solution
You'll have to get a reference to the class to call it's method with that plugin structure.
http://jsfiddle.net/D9JSQ/3/
$(document).ready(function() {
var test = $("#foo").test().data("plugin_test");
test.goodbye();
});
To do what you want, you must get rid of document.write to test it.
http://jsfiddle.net/D9JSQ/8/
;
(function($, window, document, undefined) {
var pluginName = 'test';
var defaults;
function Plugin(element, options) {
this.element = element;
this.options = $.extend({}, defaults, options);
this._name = pluginName;
this.init();
}
Plugin.prototype = {
init: function(name) {
this.hello();
},
hello: function(name) {
console.log('hello');
},
goodbye: function(name) {
console.log('goodbye');
}
}
$.fn[pluginName] = function(options) {
return this.each(function() {
if (!$.data(this, 'plugin_' + pluginName)) {
$.data(this, 'plugin_' + pluginName, new Plugin(this, options));
}
else if ($.isFunction(Plugin.prototype[options])) {
$.data(this, 'plugin_' + pluginName)[options]();
}
});
}
})(jQuery, window, document);
$(document).ready(function() {
$("#foo").test();
$("#foo").test('goodbye');
});
Look to the console for information.
Problem
I've been using the jQuery Boilerplate for developing plugins and one thing I can't figure out is how to call methods from outside the plugin. For reference, here is the boilerplate code I'm talking about: http://jqueryboilerplate.com/ In my fiddle, http://jsfiddle.net/D9JSQ/2/ Here is the code: ``` ;(function ( $, window, document, undefined ) { var pluginName = 'test'; var defaults; function Plugin(element, options) { this.element = element; this.options = $.extend( {}, defaults, options) ; this._name = pluginName; this.init(); } Plugin.prototype = { init: function() { this.hello(); }, hello : function() { document.write('hello'); }, goodbye : function() { document.write('goodbye'); } } $.fn[pluginName] = function ( options ) { return this.each(function () { if (!$.data(this, 'plugin_' + pluginName)) { $.data(this, 'plugin_' + pluginName, new Plugin( this, options )); } }); } })( jQuery, window, document ); $(document).ready(function() { $("#foo").test(); $("#foo").test('goodbye'); }); ``` I am trying to call the goodbye method using the following syntax: ``` $("#foo").test('goodbye') ``` How do I achieve this? Thanks in advance