3

(Pythonでタプルと呼ばれる正しい用語を使用しているかどうかはわかりません。意味があることを願っています。)

次のメソッドをリファクタリングしたいと思います。唯一の違いはenddate/startdateそれぞれであるため、コードを繰り返す必要はありません。

function datepicker_reload(source, isPast){
    if(isPast){
        $(source).find('.date_picker').datepicker({ 
            endDate: new Date(),
            format: $('#locale').text(), 
            weekStart:1, 
            calendarWeeks:'True',   
            autoclose: 'True', 
            todayHighlight: 'True' 
        });
    }
    else{
        $(source).find('.date_picker').datepicker({
            startDate: new Date(), 
            format: $('#locale').text(), 
            weekStart:1, 
            calendarWeeks:'True',   
            autoclose: 'True', 
            todayHighlight: 'True' 
        });
    }
}

共通の値をタプルとしてまとめることができるかどうか疑問に思っていました:

var options = { format: $('#locale').text(), 
            weekStart:1, 
            calendarWeeks:'True',   
            autoclose: 'True', 
            todayHighlight: 'True'  };

次に、そこに追加のキーペアを 1 つ追加します。

if(isPast)
   options += {endDate: new Date()}
else
   options += {startDate: new Date()}

次に、タプル全体を関数に渡します。

$(source).find('.date_picker').datepicker(options);

これは可能ですか?

4

3 に答える 3

3

あなたがやろうとしていることに対するJavaScriptの正しい構文は次のとおりです。

if(isPast){
   options["endDate"] = new Date();
}else{
   options["startDate"] = new Date();
}

オブジェクトのプロパティを設定しているだけです。

注: options.endDate = new Date();(ドット表記) も機能しますが、オブジェクトに追加するプロパティにスペース、演算子、またはその他の特殊文字が含まれている場合は機能しません。

注 2: オブジェクトのクローンを作成するのではなく、オブジェクトにプロパティを追加するためだけに、javascript オブジェクトは変更可能であると想定しています。

于 2013-01-20T14:04:14.750 に答える
1

jQuery でこれを行う従来の方法は、extendを使用することです。

$.extend(options, { endDate: new Date() });
于 2013-01-20T14:04:34.323 に答える
-1

$.extendjqueryメソッドを使用できます

function datepicker_reload(source, isPast){
    var options = { format: $('#locale').text(), 
            weekStart:1, 
            calendarWeeks:'True',   
            autoclose: 'True', 
            todayHighlight: 'True'  };

    var newDate = new Date();

    if(isPast){
        $.extend(options, { endDate: newDate } );
    } else {
        $.extend(options, { startDate: newDate } );
    }

    $(source).find('.date_picker').datepicker( options );
}
于 2013-01-20T14:06:47.307 に答える