以下是问题: 我有一个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;
答案 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'
}
});