私が実際に行ったことは、値を隠しテキストフィールドに格納する新しいdijitウィジェットを作成することでした。 full implementationは時間も表示するカスタムカレンダーウィジェットの使用を含むので、基本的な考え方はjavascriptとテンプレートに従います。
これは削減されており、このインカネーションではテストされていません。私は、制約が正しく処理され、入力にフィードバックされる値が簡単な作業ではないことを発見しました。またwidgetsInTemplate
は、これが適切にカレンダーウィジェットをロードするために取得することが重要だった:
<div class="dijit dijitReset dijitInline dijitLeft" waiRole="presentation">
<div class="dijitReset dijitInputField dijitInputContainer">
<input class="dijitReset dijitInputInner" dojoAttachPoint='textbox,focusNode' autocomplete="off" ${!nameAttrSetting} type='${type}' constraints="{datePattern: '${constraints.datePattern}', timePattern: '${constraints.timePattern}'}"/>
<div dojoType='${calendarClass}' dojoAttachPoint='calendar' id="${id}_calendar" constraints="{datePattern: '${constraints.datePattern}', timePattern: '${constraints.timePattern}'}" value='${value}'/>
</div>
</div>
:
dojo.provide("custom.DateSelector");
dojo.require("dijit.form.DateTextBox");
dojo.declare("custom.DateSelector", dijit.form._DateTimeTextBox, {
baseClass: "dijitTextBox dijitDateTextBox",
_selector: "",
type: "hidden",
calendarClass: "dijit.Calendar",
widgetsInTemplate: true,
i18nModule: "custom",
i18nBundle: "DateSelector",
templateString: dojo.cache("custom", "template/DateSelector.html")
_singleNodeTemplate: '<input class=dijit dijitReset dijitLeft dijitInputField" dojoAttachPoint="textbox,focusNode" autocomplete="off" type="${type}" ${!nameAttrSetting} />',
value: new Date(),
postCreate: function() {
this.calendar.parentTextBox = this.textbox;
this.inherited(arguments);
}
});
その後、テンプレートはおおよそ次のようになります