[英]jquery plugin options array, preventing array overwrite
我正在為jquery編寫一個插件,並且使用了這樣的代碼來允許用戶為該插件指定選項:
var settings = $.extend({
url : 'error.json',
slotWidth : 100,
slotHeight : 100,
gridWidth : 6,
gridHeight : 3,
basketLayers : 1,
layerDirection : "vertical",
classNames : {
productPanelParent : '.products-panel-parent',
productPanelTabs : '.products-panel-tabs',
productPanelGroup : '.products-panel-container',
productPanel : '.products-panel',
productBasketParent : '.products-basket-parent',
productBasketGroup : '.products-basket-container',
productBasket : '.products-basket',
productBasketMenu : '.products-basket-menu',
basketSlot : '.basket-slot',
basketSlotFull : '.basket-slot-full',
basketSlotHelper : '.basket-slot-highlight',
product : '.product',
resetBasket : '.clearBasket',
resetLayer : '.clearLayer',
viewLayer : '.viewLayer'
}
}, options);
問題是,當我嘗試覆蓋其中一個classNames時,整個數組都將使用null
值覆蓋,而沒有指定屬性。
因此,例如,我將執行以下操作:
$('#somediv').myPlugin({
gridWidth : 4,
gridHeight : 2,
classNames : {
productBasket : '.small_basket'
}
});
並且settings.classNames.productBasket
屬性將是正確的值,但是設置中的所有內容都將為null。
我該如何解決?
(是否無需編寫自定義函數來處理數組中的默認值?)
jQuery.extend()
的第一個參數可以是布爾值。 如果為true
,則擴展名是“ deep”(合並是遞歸進行的):
var settings = $.extend(true, defaults, options);
從文檔:
默認情況下,由
$.extend()
執行的合並不是遞歸的。 如果第一個對象的屬性本身是對象或數組,則第二個對象中具有相同鍵的屬性將完全覆蓋它。 這些值不會合並...但是, 通過為第一個函數參數傳遞true,對象將被遞歸合並 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.