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関数のデフォルトの動作を拡張する必要があります。DateTextBoxvalue

これを行う方法は次のとおりです。

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 に答える