6

プラグインでjQuery を使用extendして、デフォルトのパラメーターを上書きしています。しかし、私には問題があります。

これが私のデフォルト設定配列です:

slider.settings = {
            background: {
                animation : {
                    direction : 'horizontal',
                    increment : 15 //can be any number
                }
            }
        }

ここで、パラメータを上書きしたいと思いdirectionます。を使用してマージする配列は次のextendとおりです。

    settingsToOverwrite = {
        background:{
            animation:{
                direction:'vertical'
            }
        }
    }

今、私は2つをマージします:

slider.settings = $.extend(slider.settings, options)

方向値が更新されていることがわかります。ただし、インクリメントはなくなりました。この問題を回避するには、最初のレベルでしかパラメーターを設定できなかったことを知っていますが、自分のやり方でコードをより明確にすることができます。そうする方法はありますか?そうでない場合は、すべてを 1 レベルのみの深さに変更します。

4

2 に答える 2

2

jQuery の拡張はオブジェクトの「浅い拡張」であるため、これは明らかに起こっています。したがって、「アニメーション」プロパティ全体を置き換えます。

これを修正するには、brandy dandy deepExtend を使用します。

Object.deepExtend = function(destination, source) {
  for (var property in source) { // loop through the objects properties
    if (typeof source[property] === "object") { // if this is an object
      destination[property] = destination[property] || {};
      Object.deepExtend(destination[property], source[property]); // recursively deep extend
    } else {
      destination[property] = source[property]; // otherwise just copy
    }
  }
  return destination;
};

次のように使用できます。

slider.settings = Object.deepExtend(slider.settings, options);
于 2013-07-28T23:09:59.067 に答える