2012-01-25 6 views
2

私はプラグインを開発しています。ドラッグアンドドロッププラグインは正確です。jqueryプラグインのサブオプション

私のデフォルトは次のようになります。

var defaults = { 
    activeClass: false, 
    containment: false, 
    cookies: true, 
    cookieExdate: 65, 
    cursor: 'crosshair', 
    cursorAt: { 
     top: false, 
     bottom: false, 
     left: false, 
     right: false 
    }, 
    delay: 0, 
    distance: 0, 
    dragLimitation: false, 
    ghostDrop: true, 
    ghostOpacity: '0.50', 
    ghostRevert: false, 
    grid: [20,50], 
    handle:false, 
    iFrameFix: true, 
    instantGhost: false, 
    not: false, 
    onDrop: function() {}, 
    onPickUp: function() {}, 
    radialDrag: true, 
    radialOutline: false, 
    radius: 100, 
    revert: false, 
    revertDuration: 500, 
    strictMovement: false, 
    target: { 
     init: '#container', 
     lock: false, 
     offTarget: function(t) { 
      $(t).removeClass('i'); 
     }, 
     onTarget: function(t) { 
      $(t).addClass('i'); 
     } 
    }, 
    zIndex: false 
} 

は、次に私が使用します。

var o = $.extend(defaults, options)

デフォルトの値を取得するには。

Ex. o.cursorAt.left.これは私が(私はそれらを呼んでいるもの)のサブオプションを持って見たようcursorAt にサブオプションleftの値になるだろうし、彼らは次のようになります。

私はこれを使用
cursorAt: { 
    top: false, 
    bottom: false, 
    left: false, 
    right: false 
}, 

私プラグイン私は1つを使用する必要があります。たとえば:

cursorAt: { 
    bottom: 0 
} 

しかし、これは動作しないと私はcursorAtで、デフォルトで次のようにスポットので、これは知っているが存在している必要があります。

{ 
    top: false, 
    bottom: false, 
    left: false, 
    right: false 
} 

はそれを動作させる方法はありますだから私は名前を付けるだけです。どんな簡単な方法ですか?それとも、これは難しくて複雑なプロセスでしょうか。私のプラグインのコードはすでに1000行ですので、大きな変更を加えたくありません。

Jsfiddle例:

これは動作します:

http://jsfiddle.net/C4f97/

しかし、これにはない:http://jsfiddle.net/C4f97/1/ < <私はこれが動作する必要があります...

上の任意のコメントは私のプラグインはいいと思う;) 事前に感謝!

+2

私は誰もが簡潔かつ冗長で質問を書いて欲しいです。例、望ましい結果、使い方...あなたはクラスを教えることができますか? :) – Kato

+0

うわーありがとう! StackOverflowでは、このような素晴らしいコメントを得るのは初めてです。そして、実際には少し年を取ると、私はJavascriptを教える予定です:) – Shawn31313

答えて

5

代わりにこれを試してみてください:

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

2点の注目すべき詳細はここにあります。最初はブールtrueで、jQueryにそれらを再帰的に拡張するよう指示します(あなたの "サブオプション"を上書きしません)。

新しいオブジェクトを作成する2番目は{}であるため、新しいインスタンスを作成するたびにデフォルト設定を実際に変更することはありません。

+0

私は完全にこれを試してみましょう! – Shawn31313

+0

すごくありがとう! – Shawn31313

3

オプションをデフォルトにコピーすると、「ディープコピー」を使用してサブオブジェクトを再帰的にコピーし、すべてをコピーします。

$.extend(true, defaults, options); 

http://api.jquery.com/jQuery.extend/

+0

Touché!そしてリンクのための+1。しかし、インスタンスが作成されるたびにデフォルトを変更する例があります(デフォルトは最初のスロットにあるため) – Kato

+0

Word。私はデフォルトがプラグインのすべてのインスタンスに対して再インスタンス化されると仮定しますが、あなたは正しいです。まったく新しいオブジェクトを作成するほうが安全です。 – Amit

1

$.extend(true, defaults, options)を使用して、再帰的マージにディープコピーします。 jQuery.extend

関連する問題