簡體   English   中英

jQuery插件選項數組,防止數組覆蓋

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM