Hi Guys -

At the Ajax Experience we talked about possibly making a reusable function
for helping to encapsulate much of the functionality commonly seen in jQuery
plugins.

The important points seemed to be:
 - Plugins need a way to maintain state from one call to the next (generally
in the form of 'options').
 - The state needs to be directly associated with the elements that they're
called on
 - There needs to be a default set of options to load state from
 - Plugins need to clean-up any events or data that they bind to an element
 - All methods introduced by a plugin should have access to the same state

I put my code up here:
http://dev.jquery.com/~john/plugins/widget/
http://dev.jquery.com/~john/plugins/widget/widget.js

This is how you would use it:

The most basic call: Adds a single method (.test()) whose 'this' represents
an individual element wrapped in a jQuery set. An empty options object is
provided, as well.

jQuery.plugin("test", function(a, b){
  this.options = a;
  this.hide(b);
});

jQuery("div").test("woo", "slow");

Equivalent to the first style shown above.

jQuery.plugin("test", {
  setup: function(a, b){
    this.options = a;
    this.hide(b);
  }
});

jQuery("div").test("woo", "slow");

Next step up: A default set of options is provided - which implies that the
first argument to .test() will be an options object.

jQuery.plugin("test", {
  options: { speed: "slow" },
  setup: function(){
    this.hide( this.options.speed );
  }
});

jQuery("div").test({ speed: "fast" });

Add in some related methods (related to the root setup method) that also
have access to the instance and options.

jQuery.plugin("test", {
  options: { speed: "slow" },
  setup: function(){
    this.hide( this.options.speed );
  },
  methods: {
    test2: function(){
      this.show( this.options.speed );
    }
  }
});

jQuery("div").test({ speed: "fast" }).test2();

Remove some functionality added previously:

jQuery.plugin("test", {
  options: { name: "test" },
  setup: function(){
    this.addClass( this.options.name );
  },
  teardown: function(){
    this.removeClass( this.options.name );
  }
});

jQuery("div").test({ name: "blah" });

and the cleanup is triggered by (where 'test' is the name of the plugin that
you wish to remove):

jQuery("div").trigger("remove.test");

It's not completely clear yet what will happen with the above plugin - I
just wanted to put it out there since there was some interest in seeing it.

--John

--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to