2013-08-26 41 views
0

我正在使用dijit.form.DateTextBox來更新我的日期字段。使用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

(該解決方案將上面的Dojo 1.6版本一起使用)

默認設置DateTextBox一個新時覆蓋舊值。這意味着設置該值時會丟失時間上下文。如果您想使其成爲可能,則必須擴展DateTextBox_setValueAttr函數的默認行爲,因爲這是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來證明這一點。

+0

謝謝你的幫助。其實我忘了提及我正在使用dojo 1.6,這個代碼在1.7以上工作正常..你可以建議更改爲1.6。我嘗試過,但沒有奏效。 –

+0

使用'dojo.declare'來代替'declare'。 – g00glen00b

+0

是我試過,但它說 TypeError:modulename.split不是函數 'var syms = modulename.split(「。」);' –