2010-05-07 54 views
2

这里的问题是: 我有一个very complex plugin,做很多不同的初始化和执行时会绑定的。jQuery的:插件间通信

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

目前,插件代码位于闭包内部,并且它不知道其他时间插件相同的插件已在元素上运行。

是否有模式人们在他们想要相互沟通时遵循吗?

我想到的是这样的:

$.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; 

回答

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' 
    } 
}); 
+0

更新问题更加清晰。至于.data() - 我不认为这将工作,因为我想传递实际的功能。我可以用数据做到这一点吗?我的印象是它只允许字符串。 – mkoryak 2010-05-07 13:05:12

+0

好吧然后。谢谢 – mkoryak 2010-05-07 13:13:59