Check this thread: http://groups.google.com/group/jquery-dev/browse_thread/thread/664cb89b43ccb92c/34f74665423f73c9?lnk=gst&q=structure+plugin+authoring#34f74665423f73c9
I've written a plugin to allow you to call methods as they should be called on a plugin while still using 'this' to refer to the DOM collection inside the plugin as you would in jQuery. There are a few examples there, but you can email me if you have any questions, given that you decide to use it. It's a similar approach to samer's, but it does a lot of the setup work involved for you. @Damir Zekić Chaining in jQuery isn't necessarily a "convention" per say, but it is a good practice to do so when practical. To put it in context, if you do namespace your plugin it might be better to return an instance of the plugin in certain methods rather than jQuery. Alternatively, the method might return a scalar value, etc. $('div').myPlugin().moveRight().moveLeft() might be more efficient in the long run than $('div').myPlugin().moveRight().myPlugin().moveLeft (), but it all depends on how you design the API to be used. The plugin for writing plugins that I give in the thread linked to above explains that 'this' within the context of the plugin refers to the selected DOM elements as it would in jQuery, which brings a lot of flexibility into plugin namespacing. -- Trey On Jun 24, 2:50 am, Bob Spryn <bobsp...@gmail.com> wrote: > Cool. Good suggestion. Very smart. > > Thanks, > Bob > > On Jun 23, 2:48 am, samer <samerzia...@gmail.com> wrote: > > > > > It's not wrong, but to save you all the lines in the switch you could > > implement your functions (init, advance, ...) in an object like > > var jMyPlugin = { init: function().... > > > or > > > jMyPlugin.prototype.init > > > or whatever > > > so then your switch case could be replaced with > > } else if (typeof options === "string"){ > > jMyPlugin[option]; > > } > > > On Jun 23, 2:26 am, Bob Spryn <bobsp...@gmail.com> wrote: > > > > So here's what I've done and it seems to be working pretty well. Let > > > me know if I'm doing anything weird. (I'm going to provide access to > > > the default options object publicly at some point, but its working for > > > now) > > > > //Simple screen wizard plugin > > > ;(function($) { > > > $.fn.screenWizard = function (options) { > > > > var defaultOptions = { > > > size : "100", > > > duration : 1000, > > > defaultLeft : 0 > > > }; > > > > if (typeof options === "object") { > > > return init(this, options); > > > } else if (typeof options === "string"){ > > > switch (options) { > > > case "advance": > > > return advance(this); > > > break; > > > case "back": > > > return back(this); > > > break; > > > case "reset": > > > default: > > > return reset(this); > > > break; > > > > } > > > } > > > > function init(obj, options){ > > > obj.settings = $.extend(defaultOptions, options); > > > return obj.each(function(){}); > > > }; > > > > function advance(obj){ > > > return obj.each(function(){ > > > var current = > > > parseInt($(obj).css("left")); > > > $(this).animate({left: (current - > > > obj.settings.size) + "px"}, > > > obj.settings.duration); > > > }); > > > }; > > > > function back(obj){ > > > return obj.each(function(){ > > > var current = > > > parseInt($(obj).css("left")); > > > $(this).animate({left: (current + > > > obj.settings.size) + "px"}, > > > obj.settings.duration); > > > }); > > > }; > > > > function reset(obj){ > > > return obj.each(function(){ > > > $(this).animate({left: > > > obj.settings.defaultLeft }, > > > obj.settings.duration); > > > }); > > > }; > > > > }; > > > > })(jQuery); --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to jquery-dev@googlegroups.com To unsubscribe from this group, send email to jquery-dev+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en -~----------~----~----~----~------~----~------~--~---