在dojo dijit / form / DateTextBox中,例如
<link href="http://ajax.googleapis.com/ajax/libs/dojo/1.9.3/dojo/resources/dojo.css" rel="stylesheet" />
<link href="http://ajax.googleapis.com/ajax/libs/dojo/1.9.3/dijit/themes/claro/claro.css" rel="stylesheet" />
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.9.3/dojo/dojo.js" djConfig="parseOnLoad:true"></script>
<body class="claro">
<input type="text" name="testDate" data-dojo-id="testDate" class="dateTextBox" value="" data-dojo-type="dijit/form/DateTextBox" id="scheduledDate" data-dojo-props="constraints:{datePattern: 'MM/dd/yyyy|MMddyyyy'}">
在这里你们都可以看到,我正在尝试使用两种日期格式。但这适用于首先采用的格式,在本例中为MM / dd / yyyy。但是MMddyyyy没有工作。
请帮助我....
答案 0 :(得分:3)
我不认为这可能与小部件本身有关。原因是datePattern
用于输入和输出。因为您只能显示一个输出,所以只能有一个模式。如果我运行您的示例并从下拉列表中选择数据,那么2012年12月8日的输出是12/08/2012 | 12082012.它在屏幕后面的作用是使用模式直接使用{{解析/格式化1}}不支持正则表达式的模块(它只是一个简单的日期模式)。
但是,实现并非完全不可能,您可以扩展dojo/date/locale
并使其工作,以便输入和输出有不同的模式。查看diji/form/_DateTimeTextBox
的代码。在第77行,您可以看到实际将输入字符串转换为日期的dijit/form/DateTextBox
方法。您必须覆盖此功能。
覆盖小部件的一个例子是:
parse
我实际上在这里做的是引入一个名为declare("custom/DateTextBox", [DateTextBox], {
parse: function(value, constraints) {
var out = null;
if (constraints.inputDatePattern !== undefined) {
var patterns = constraints.inputDatePattern.split('|');
for (var idx = 0; idx < patterns.length && out === null; idx++) {
out = this.dateLocaleModule.parse(value, lang.mixin(constraints, {
datePattern: patterns[idx]
}));
}
} else {
out = this.inherited(arguments);
}
return out || (this._isEmpty(out) ? null : undefined);
}
});
的新约束,用于解析输入(而inputDatePattern
将用于输出)。如果未定义datePattern
,我使用原始函数来解析输入。如果已定义,则我通过管道符号(inputDatePattern
)拆分模式并尝试每个模式,直到获得正确的值。
这一切都会导致自定义日期文本框。您还必须更改HTML,直到您使用this。