> You could pass the changed element as additional arguments to the event,
> so you just update those, something like this:

> // jquery.myPlugin.js
> $(window).bind('myPluginReload', function(event, changedElement) {
>     $("find stuff", changedElement).myPlugin({do: "things"});
> });

> // Content being returned via AJAX
> $(window).trigger('myPluginReload', changedElement);

Here's the plugin I've ended up using:

jquery.behaviors.js:

-------
/**
 * Add behaviors to the jQuery object.
 */
jQuery.extend({
  behaviors: [],
  registerBehavior: function(attachFunction, ready) {
    // Default to true.
    var ready = (ready == null) ? true : ready;
    jQuery.behaviors.push(attachFunction);
    if (ready) {
      jQuery.readyList.push(attachFunction);
    }
  }
});

/**
 * Attach registered behaviors.
 */
jQuery.fn.attachBehaviors = function() {
  var elt = this;
  if (jQuery.behaviors) {
    // Execute all of them.
    jQuery.each(jQuery.behaviors, function(){
      this.apply(elt);
    });
  }
};

-------

It's used like this:

// Register a behavior:
$.registerBehavior(mybehavior.attach);

// Attach all registered behaviors to an element:
$(elt).attachBehaviors();

Comments on the implementation?

I've submitted this as a patch to Drupal, http://drupal.org/node/125153. I'd 
also like to contribute it as a jQuery plugin. Consistency in how we do this 
will improve interoperability between different jQuery-based AJAX 
applications. 


_______________________________________________
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/

Reply via email to