2010-05-07 53 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