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'  };

然后在其中添加一个额外的密钥对:(但是这一步似乎完全关闭了,我如何实现它?)

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 回答