0

我正在使用 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'

请建议。

4

1 回答 1

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来演示这一点。

于 2013-08-26T13:43:40.840 回答