2015-10-21 98 views
1

我一直在使用jQuery幾個月(我仍然是Mootools的門徒),現在我試圖在jQuery中創建我的第一個插件。如何使jQuery插件中的設置(或選項)適用於所有方法?

事情是,我想在我的插件中有一些方法,我希望這些方法能夠訪問插件的所有「屬性」。

例如:

(function($) { 
    $.fn.test= function(method) { 
      var settings; 
      init: function() { 
       var _defaults = { 
        option1: 'value1', 
        option2: 'value2', 
        option3: 'value3', 
        url: 'default.php' 
       }; 
       settings = $.extend({}, _defaults, method); 
      }, 
      load: function(){ 
       $.ajax({ 
        cache : false, 
        type : "GET", 
        url  : settings.url, 
        dataType: "json", 
        success : function(response){ 
         console.log(response); 
        }, 
        error : function(response) { 
         alert("Error loading data."); 
        } 
       });    
      } 
    } 
}(jQuery)); 

現在的插件本身的召喚: //初始化 $( '#BOX1')測試({ 網址:。 '另一-url.php' });

// Call the load method 
$('#element').test('load'); 

的問題是,當我打電話,而不是「另一個-url.php」「負荷」的settings.url是等於「如default.php」。

是否可以像在OOP中那樣處理這個問題,我的意思是將'settings'設置爲「class」的一個屬性,然後對該屬性的所有更改都是持久的?

我想在僞代碼,實現什麼:

Class Test{ 
    // Specify default settings 
    private settings = // some default values; 

    // Constructor 
    public Test(specificSettings){ 
      //Code to merge/update specificSettings with settings 
    } 
    public load(){ 
      // If I access this.settings in here, I will get the 
      // updated settings and not the default one 
    } 

} 

這也將允許根據需要我有儘可能多的「實例」,每個人都有自己設置的值。

感謝提前:)

+0

你嘗試過什麼,我人在回答? –

+0

你好@KevalBhatt!它工作完美。非常感謝你! –

+0

你知道如何接受回答http://meta.stackexchange.com/a/5235 –

回答

0

所以按你的插件結構,必須首先調用init方法 ,因爲當你調用$(「......」)。測試(‘負荷’),這樣它會不調用init函數,因此將其在第一次

  1. $( 「......」)。測試( '初始化')
  2. $( '#BOX1')。測試中聲明默認網址({url:'another-url.php'})
  3. $(「....」)。test('load')

或者在插件的內部總是調用init();這將解決您的問題

(function($) { 
    $.fn.test= function(method) { 
      var settings; 
      **init();** // call internally 
      init: function() { 
       var _defaults = { 
        option1: 'value1', 
        option2: 'value2', 
        option3: 'value3', 
        url: 'default.php' 
       }; 
       settings = $.extend({}, _defaults, method); 
      },...... 

相關問題