2011-11-07 54 views
1

我希望問題不是太不明確。目前,我正在嘗試爲jQuery編寫一個插件,但我正在用各種方式來構建它。我發現bxSlider,並認爲這是插件代碼很容易訪問。這裏有一個簡單的例子:使用這個jQuery插件(不是我的)良好的編碼習慣?

(function($){ 

$.fn.letSlider = function(options){  

    var defaults = { 
     speed: 500,       
     onBeforeSlide: function(){} //Callback   
    } 

    var options = $.extend(defaults, options); 

    //cache base element 
    base = this; 

     //public functions 
     this.init = function(){ 
      text = giveText(); 
      alert(text + ' ' + options.speed); 

     }; 

     //private functions 
     function giveText(){ 
       return 'blubb'; 
     }; 

    this.each(function(){ 
     // make sure the element has children 
     if($(this).children().length > 0){ 
      base.init(); 
     } 
    }); 

    return this;       
} 
})(jQuery); 

所以它有一個清晰的結構,我設法理解。然而,它看起來與我迄今爲止所看到的所有插件結構完全不同,所以我不確定,如果它稍後不會給我帶來麻煩的話。儘管如此,它基本上滿足了我需要的一切:公開選項,回調,私人和公共職能。有了這個,它也應該是可鏈接的。我注意到的一件事情是,基本上所有的東西都在最初的$ .fn.bxSlider = function(options){...之前我從來沒有見過。

就其他插件結構而言,它們要麼太複雜以至於我無法掌握(對我來說很丟臉),要麼我無法實現它們。例如,與http://www.learningjquery.com/2007/10/a-plugin-development-pattern我沒有使opts(選項變量)在私人或公共職能。但我離題了。 ...

回答

0

我認爲你只需要使用任何最適合你試圖製作插件的技術。你給的例子看起來像一個很好的模板。

如果您無法訪問opts是因爲它是$ .fn.hilight函數中的一個私有變量。所以在相同範圍之外定義的方法自然不能訪問它。

在這裏的例子中,options也是一個私有變量,但下面定義的方法在相同的範圍內,因此它們被授予訪問權限。

例1:

foo = function() { 
    var secret = "foo"; 
} 

foo.bar = function() { 
    alert(secret); // NOT OK! 
} 

例2:

foo = function() { 
    var secret = "foo"; 

    this.bar = function() { 
    alert(secret); // OK! 
    } 
} 
+0

啊,謝謝,我太困惑了,昨天看不到範圍。其實,我在第一個例子中的結構完全符合你的意思。 – Narretz

1

如果您想知道您是否遵循最佳做法,我會在創作插件上使用jQuery's own documentation開始。他們提供了相當容易遵循的例子。

+0

謝謝,但我讀了,我認爲這是一個有點太複雜了。基本上,我想對上述結構與jQuery建議的功能進行有根據的猜測。 – Narretz