使用dijit.form.DateTextBox无法保留正确的Time值

时间:2013-08-26 12:22:14

标签: javascript spring-mvc dojo

我正在使用dijit.form.DateTextBox来更新我的日期字段。

<form:input id="date_id" name="date_field" path="createDate"
                                dojoType="dijit.form.DateTextBox"
                                disabled="false" constraints="{datePattern:'dd/MM/yyyy hh:mm:ss.SS'}"
                                invalidMessage="invalid" promptMessage="invalid"
                                lang="en-us" required="true"/>

现在,假设我的'createDate'值为'05/01/2012 21:10:17.287',但在日期文本框中显示为'05/01/2012 12:00:00.00'
因此,在编辑此字段时,我无法保持原样。

无论如何,我可以保留那段时间'21:10:17.287'

请建议。

1 个答案:

答案 0 :(得分:1)

(此解决方案适用于上述Dojo 1.6版本)

默认DateTextBox会在设置新值时覆盖旧值。这意味着在设置值时会丢失时间上下文。如果您希望这样做,则必须扩展_setValueAttr DateTextBox函数的默认行为,因为这是value字段的设置者。

你可以这样做:

declare("custom.DateTextBox", [DateTextBox], {
    _setValueAttr: function(value, priorityChange, formattedValue) {
        if(value !== undefined){
            if(typeof value == "string"){
                value = stamp.fromISOString(value);
            }
            if(this._isInvalidDate(value)){
                value = null;
            }
            if(value instanceof Date && !(this.dateClassObj instanceof Date)){
                value = new this.dateClassObj(value);
            }
        }
        if (value != null && this.value != null) {
            value.setHours(this.value.getHours());
            value.setMinutes(this.value.getMinutes());
            value.setSeconds(this.value.getSeconds());
            value.setMilliseconds(this.value.getMilliseconds());
        }
        this.value = value;
        this.inherited(arguments);
    }
});

这里发生的事情非常简单,我要做的第一件事就是将新值解析为有效的Date。在替换原始值之前,我正在复制时间字段(小时,分钟,秒和毫秒)。

我还做了一个JSFiddle来证明这一点。