2014-02-13 28 views
0

我經常使用下面的設計模式來創建jQuery插件。我在插件中指定默認值,並允許用戶在初始化插件時更改它們。通常情況下,我的default對象只包含字符串屬性,而不是對象,但是這次我希望將其中一個默認屬性作爲對象(在我的示例中爲default_obj_1)。在腳本的底部,您會看到我試圖通過傳遞插件{default_value_2: 666, default_obj_1.default_prop_3: 434}來更改其中一個屬性,但它無效的JavaScript和錯誤輸出。我也嘗試通過它{default_value_2: 666, default_obj_1: {default_prop_3: 434}但它似乎覆蓋了其他值應該保持。將配置對象傳遞給jQuery插件

如何更新jQuery插件中的默認值之一?

(function($){ 
    var defaults = { 
     default_value_1 : 123, 
     default_value_2 : 321, 
     default_value_3 : 111, 
     default_obj_1 : { 
      default_prop_1 : 444, 
      default_prop_2 : 534, 
      default_prop_3 : 231 
     } 
    }; 

    var methods = { 
     init : function (options) { 
      var settings = $.extend({}, defaults, options); 
      return this.each(function() { 
       //Do something using settings 
      }); 
     } 
    }; 

    $.fn.myPlugin = function(method) { 
     if (methods[method]) { 
      return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 
     } else if (typeof method === 'object' || ! method) { 
      return methods.init.apply(this, arguments); 
     } else { 
      $.error('Method ' + method + ' does not exist on jQuery.myPlugin'); 
     }  
    }; 

    }(jQuery)); 

$(function(){ 

    var myPlugin=$('#elem').myPlugin({default_value_2:666,default_obj_1.default_prop_3:434}); 

    var myPlugin=$('#elem').myPlugin({default_value_2:666,default_obj_1:{default_prop_3:434} }); 

}); 

回答

1

變化:

var settings = $.extend({}, defaults, options); 

var settings = $.extend(true, {}, defaults, options); // notice the first param TRUE 

做一次深層(遞歸)合併。

+0

啊哈!感謝Mathlentics。我需要運行,但是當我回來並選擇這個作爲答案時會進行測試(只要它有效:) – user1032531