2012-10-28 59 views
0

http://docs.jquery.com/Plugins/Authoring#Defaults_and_Options描述插件如何具有默認選項。jQuery插件。添加選項和回調函數

var settings = $.extend({ 
    'location'   : 'top', 
    'background-color' : 'blue' 
}, options); 

所選答案jQuery Plugin: Adding Callback functionality的第二部分介紹瞭如何在選項對象添加一個回調。

// extend the options from pre-defined values: 
var options = $.extend({ 
    callback: function() {} 
}, arguments[0] || {}); 

// call the callback and apply the scope: 
options.callback.call(this); 

我怎麼會在同一時間同時添加默認設置和一個回調函數?此外,我有點困惑,爲什麼我會擴展對參數[0]或空對象的默認回調函數。由於

回答

1

簡單地合併這兩個,你可以在一個對象儘可能多的項目,只要你想

$.fn.myPlugib = function(user_options) { 
    var options = $.extend({ 
     'location'   : 'top', 
     'background-color' : 'blue' 
     'callback': function() {} 
    }, user_options || {}); 

    //now options object can be used to get callback or any other options when needed 
    options.callback.call(this, options.location) 
} 

user_options || {}可以確保如果用戶沒有提供任何選項,我們使用空選項對象

+0

哇,那很容易。缺乏回調引號的任何原因?另外,爲什麼參數[0] || {} 不再需要? Thans – user1032531

+0

我只是將用戶提供的選項與我們的默認選項合併,因此不需要檢查可選的第一個參數,JavaScript字典也可以使用或不使用引號(除非名稱不是適當的變量名稱,例如背景顏色),我只是合併你的兩個例子:) –

+0

對不起,最後一個。爲什麼傳遞options.location(即options.callback.call(this,options.location)) – user1032531

1

關於你的最後一個問題,關於arguments[0]擴展等價於有一個明確的paremeter稱爲settings和做:

$.fn.plugin = function(settings) { 
    // extend the options from pre-defined values: 
    var options = $.extend({ 
     callback: function() {} 
    }, settings || {}); 

    // call the callback and apply the scope: 
    options.callback.call(this); 
}​ 
+0

謝謝胡安。是的,我搜索了「javascript參數」,並發現了這一點。然後我嘗試使用這兩個設置|| {}以及設置(不包括|| {})。我這樣做,無論是否發送設置對象,但得到了相同的結果。也許對跨瀏覽器的支持?我正在使用FF 15 – user1032531