2011-04-19 49 views
1

我有一個插件,可將選定的值從下拉菜單轉換爲連接字符串,以便在文本字段中使用。如何通過插件添加訪問器方法到元素?

該插件被稱爲像這樣:

info = $('select'); 
info.my_plugin({ /* plugin options */ }); 

我想這樣做的是該元素(最好是jQuery的集合)上添加一個訪問方法,以便在以後的時間,我可以打電話(在上面的代碼之後):

info.get_values(); 

這將調用私有方法(在插件中定義)返回當前爲jQuery元素設置的值。

如何修改我的插件來做到這一點?我的插件是當前設置使用這種模式:

$.fn.my_plugin = function(options) {}; 

回答

2

我建議使用jQuery的.data。像

$.fn.myPlugin = function (options) { 

    var handler = {}; 

    this.data('myPlugin', handler); 

    handler.options = options; 

    handler.getValues = function() { 
     // return some values 
    }; 

    return this; 

}; 

這樣,您的插件暴露的API保持孤立和乾淨。

然後用戶可以做

$('select').myPlugin(); 

// later somewhere else 
$('select').data('myPlugin').getValues(); 

注:我把這個想法很久以前從jQuery的工具。不知道他們是否仍在這樣做。

0

你將不得不使用其他功能擴展$ .fn對象,像這樣:

$.fn.my_plugin = function(options) { 

    // ...your plugin code, setting the var "concatenatedDropDownString" 

    $.fn.get_values = function(){ 
     return concatenatedDropDownString; 
    }; 

    return concatenatedDropDownString; 
}; 
+0

很酷,我會給它一個去。謝謝! – neezer 2011-04-19 15:44:07

+1

只有當插件用於單個元素時,這纔會起作用,因爲它會在每次調用時重新分配'$ .fn.get_values'。 – 2011-04-19 15:45:53

+0

是的,它必須修改多個元素。請參閱上面的接受答案 – Simeon 2011-04-20 08:24:54