2011-11-28 29 views
1

我知道這個問題已經圍繞了幾次,但答案似乎並不是我正在尋找的。說我有一個名爲「jdropdown」插件,看起來像:宣佈我想允許用戶覆蓋在插件中renderItem功能插件現在,當重寫像jQuery UI中的jQuery插件函數

(function($){ 
    var options = {}, 
    methods = {}, 
    renderItem = function(){}, 

    $.fn.jdropdown = function(method){ 
     // plugin method despatcher 
    }); 
})(jQuery); 

。我已經注意到jQuery UI通過允許通過數據屬性訪問項目來解決這個問題(在這個例子中看起來像這樣:http://jqueryui.com/demos/autocomplete/#custom-data),但是每當我嘗試自己做這樣的事情時,我就會陷入死衚衕。我已經閱讀了http://docs.jquery.com/Plugins/Authoring的「數據」部分,但沒有效果(他們沒有真正描述這些東西是如何工作的,他們只是寫了很多'FTW'並陳述它的用途)。

是否有任何人誰可以告訴我如何用我的元素(插件錨)的數據屬性來訪問插件的方法來覆蓋它們像這樣:

$('.someThing').jdropdown().data('jdropdown').renderItem = function(){} 

感謝,

回答

2

它傳遞作爲一個選項。

(function($){ 
    var options = { 
     renderItem: function(){} 
    }; 

    $.fn.jdropdown = function(method){ 
     $.extend(options, method); 
     // plugin method despatcher 
    }; 
})(jQuery); 

然後使用它:

$('.someThing').jdropdown({ 
    renderItem: function(){ 
     //something.... 
    } 
}); 

簡單的例子:http://jsfiddle.net/maniator/GxGz9/

+0

哦,是啊,實際上看起來像一個更好的選擇。要試試,但留下的問題打開一會兒,看看我是否得到其他答覆,謝謝:) – Sammaye

+0

@Sammaye我也提了一個小提琴以及^ _ ^看到那裏 – Neal

+0

是的,這是一個很棒的方式工作完美,決定去與它再次感謝:) – Sammaye

3
  • 創建關閉並保存原來的插件,以備將來使用;
  • 重新創建具有相同名稱的插件;
  • 做所有你想要的和調用原始插件。

    (function(){ 
        var originalPlugin = $.fn.pluginname; 
    
        $.fn.pluginname = function(options) { 
    
         var defaults = { 
          someOption: 'string', 
          anotherOption: { /* some object, if you need it ... */ } 
         } 
    
         var options = $.extend(defaults, options); 
         var $this = $(this); 
         $this.css('background-color', 'red'); // for example 
    
         /* do something with '$this' applying any jquery */ 
    
         originalPlugin.apply(this, arguments); 
        } 
    })(); 
    
+1

好的方式來創建插件等默認 – Sammaye