jQuery:插件间通信

时间:2010-05-07 12:50:48

标签: javascript jquery jquery-plugins

以下是问题: 我有一个very complex plugin,它在执行时会执行许多不同的初始化和绑定。

我希望能够在同一个元素上多次运行相同的插件,为它提供不同的选项。在元素上运行一次后,在该元素的后续执行中不需要再次进行某些初始化。

目前,插件代码位于一个闭包内,并且它对该元素上运行相同插件的其他时间一无所知。

当人们想要进行相互沟通时,是否存在模式

我在考虑这样的事情:

$.plugin = {
   globalRefs = [];
}
$.fn.plugin = function() {
  var that = {};
  $.fn.plugin.id ++; //each execution gets its unique id

  var privateFn = function() { ... };

  that.privateFn = privateFn; //expose all useful inner functions to that.

  $.plugin.globalRefs[$.fn.plugin.id] = that; //make that global 
} 
$.fn.plugin.id = 0;

1 个答案:

答案 0 :(得分:3)

你谈到“其他插件”,但目前尚不清楚你的意思;还有什么插件?他们需要彼此“了解”什么?

如果您只想维护状态,为什么不直接使用jQuery data()机制在目标DOM元素上存储您需要的内容?这会让你的插件找到以前的调用,它也会允许这些神秘的“其他插件”使用存储的数据。

// ...
$(theElement).data('pluginName', { 'fabulous': 'data' });

使用此机制存储的数据可以是您喜欢的任何内容:

$(theElement).data('pluginName', {
  'aNumber': 23.5,
  'anArray': ['hello', 'world'],
  'aFunction': function(arg) {
    alert("wow a function! Here is the argument: " + arg);
  }
  'anObject': {
    'more': 'stuff'
  }
});