То, что я на самом деле сделал, чтобы создать новый Dijit виджет, который хранит значение в скрытом поле ввода текста. Основная идея следует в javascript и шаблоне, хотя full implementation более сложна, так как включает также пользовательский виджет календаря, который также отображает время.
Это было отрезано и не проверено в этом воплощении. Я обнаружил, что обработка передаваемых ограничений корректно, а значение, возвращаемое на вход, не было тривиальной задачей. Также widgetsInTemplate
имеет решающее значение, чтобы получить это, чтобы загрузить виджет календаря правильно:
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);
}
});
Затем шаблон выглядит примерно так:
<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>