是否可以为dojo dijit / form / DateTextBox提供多个datePattern

时间:2014-02-05 07:44:49

标签: javascript dojo dijit.form

在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没有工作。

请帮助我....

1 个答案:

答案 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