1

これを書くための(はるかに)より良い方法はありますか?私は道場を使っています。多分混ぜることはうまくいくでしょうか?

  ajaxValidate: function(value, options){

    // Set some defaults
    options.ajaxInvalidMessage = options.ajaxInvalidMessage || "Value not allowed";
    options.ajaxStore = options.ajaxStore || null;
    options.ajaxFilterField = options.ajaxFilterField  || 'name';

演算子がないようで||=、これは私には非常に冗長に見えます...

4

2 に答える 2

2

あなたが示す方法:

obj.prop = obj.prop || "default";

...はかなり一般的なイディオムですが、個人的には、実際には2つの文字が追加されているにもかかわらず、ifステートメントの方がわかりやすいと思います。

if (!obj.prop) obj.prop = "default";

より一般的な方法が必要な場合は、次のような関数を作成できます(Dojoに精通していません。おそらく、すでにそのような関数があります)。

function addDefaults(obj, defaults) {
    for (prop in defaults)
        if (!obj.hasOwnProperty(prop))
            obj[prop] = defaults[prop];
}

次に、コードスニペットで次のように使用します。

ajaxValidate: function(value, options){

    addDefaults(options, {
       ajaxInvalidMessage : "Value not allowed",
       ajaxStore : null,
       ajaxFilterField  : 'name'
    });

私の場合、プロパティがオブジェクトに存在するかどうかをテストするメソッドaddDefaults()を使用していることに注意してください。これは、プロパティが「真」であるかどうかをテストするために開始した構文とは微妙に異なります。hasOwnProperty()||

于 2012-08-07T04:37:03.797 に答える
1

ミックスインを使用することは、よりクリーンなアプローチです。このようにして、デフォルトを1つのオブジェクトに明示的にグループ化することもできます。

http://dojotoolkit.org/reference-guide/1.7/dojo/mixin.html

ajaxValidate: function (value, options) {
    options = dojo.mixin({
        ajaxInvalidMessage: "Value not allowed",
        ajaxStore: null,
        ajaxFilterField: "name"
    }, options);

    //...
}
于 2012-08-07T04:42:07.397 に答える