我正在使用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'
。
请建议。
答案 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来证明这一点。