2009-06-30 5 views
1

プラグインのデフォルトのオプションとしてextendを使用しようとしています。しかし、それはドキュメントに記載されているようには機能しません。3つのパラメータを持つjquery.fn.extend

var empty = {} 
var defaults = { validate: false, limit: 5, name: "foo" }; 
var options = { validate: true, name: "bar" }; 
var settings = $.extend(empty, defaults, options); 

ここでの設定では、デフォルトとオプションをマージし、デフォルトを変更することはありません。

が、警告(settings.validate)はtrue..whichが、それは...任意のコメント

THnks Coool

答えて

2

あなたのコードオーバーライドしていることを示しています。

var empty = {} 
var defaults = { validate: false, limit: 5, name: "foo" }; 
var options = { validate: true, name: "bar" }; 
var settings = $.extend(empty, defaults, options); 

を...結果は...

settings == { validate: true, limit: 5, name: "bar" } 
empty == { validate: true, limit: 5, name: "bar" } 

これはまさにdocumentationは、それが何をすべきと言う:

jQuery.extend([deep], target, object1, [objectN])

が変更されたオブジェクトを返し、一つ以上の他の人と一つのオブジェクトを拡張します。

それは変数emptyを変更し、あなたがsettingsに格納同じ変数への参照を返します。

0

あなたはそれが少しさらに取る場合しかし、間違った何かがあります:

var empty = {}; 
var defaults = { validate: false, limit: 5, name: "foo", buttons : {}}; 
var options = { validate: true, name: "bar"}; 
var settings = $.extend(empty, defaults, options); 

settings.buttons['Ok'] = 
    function() 
    { 
     alert("TEST"); 
    }; 

このコードはdefaults.buttonsを実行した後は、誰もが理由を説明することができ、[「OK」]が含まれて?

0

ええと...もしあなたがvar settings = $.extend(empty, options, defaults);と書いたら? 私はあなたがオプション+デフォルトの小道具のフルセットで設定すると思います。 dafaultが同じ名前のオプションを上書きする場所。 それはあなたが望むものですか?

デフォルトは、デフォルトを意味します。このようにして、必須パラメータの作成をやめることができます。それで、なぜ設定が、設定で過ぎ去ったデフォルトを持たなければならないのか。ではない?そして、あなたがサンプルを採取した理由が正しいと私の奇妙な;)しかし、あなたの質問に答える(私は願っています)。

関連する問題