【问题标题】:Is it possible to have more than one datePattern for dojo dijit/form/DateTextBoxdojo dijit/form/DateTextBox 是否可以有多个 datePattern
【发布时间】:2014-02-05 07:44:49
【问题描述】:

以 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 不工作。

请帮帮我……

【问题讨论】:

    标签: javascript dojo dijit.form


    【解决方案1】:

    我认为小部件本身不可能做到这一点。原因是datePattern 用于输入和输出。因为只能显示一种输出,所以只能有一种模式。如果我运行您的示例并从下拉列表中选择一个数据,则输出为 12/08/2012|12082012 日期为 2012 年 12 月 8 日。它在屏幕后面的作用是使用该模式直接使用 @987654324 解析/格式化@ 不支持正则表达式的模块(它只是一个简单的日期模式)。

    然而,这并非完全不可能实现,您可以扩展dijit/form/DateTextBox 并使其工作,以便输入和输出有不同的模式。查看diji/form/_DateTimeTextBox 的代码。在第 77 行,您可以看到 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 的内容。

    【讨论】:

    • 我是 dojo 的新手,所以建议我用其他方法或给我一些工作示例。我不明白您提供的链接中的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    相关资源
    最近更新 更多