ExtJS 'datefield' 验证覆盖

Posted

技术标签:

【中文标题】ExtJS \'datefield\' 验证覆盖【英文标题】:ExtJS 'datefield' validation overrideExtJS 'datefield' 验证覆盖 【发布时间】:2011-04-17 12:29:21 【问题描述】:

我需要一个具有一些自定义行为的日期列,特别是我需要能够在同一字段中输入日期或年龄(年龄保持呈现为年龄,日期保持呈现为日期)

例如。输入“23”将在字段中保留“23”作为有效值,或输入“22/1/88”将保留“22/1/88”作为有效值。

所以我尝试使用这样定义的编辑器创建一个日期列(注意验证覆盖):

editor: 
    xtype: 'datefield',                                 
    format: 'd/m/Y',                                
    validate: function()
      if(!this.value.match(SOME_REGEX)         
        if(!this.value.match(SOME_REGEX)
          return false;
                   
                   
      return true;
                                   

Chrome 调试器显示验证事件和验证功能对于日期正确,但是,当我尝试输入年龄(int)时,在点击输入字段后获取该值并尝试从中生成日期,呈现将猜测的日期返回到该字段并调用 THEN 验证。

我能找到的唯一记录在案的验证前事件是

stripCharsRe

默认为 NULL。

任何人都可以对此有所了解吗?

【问题讨论】:

【参考方案1】:

在这种情况下,我建议您使用/配置 TextField 作为编辑器组件并编写自定义验证器(就像在您的 sn-p 中一样)来验证值。

(我知道这并不能直接回答您的问题,但由于 DateField 是为处理 Date 对象而构建的,因此您当前的方法将充满问题)

编辑-

如果必须使用日期选择器,请使用 TriggerField 作为基础组件,并在其 onTriggerclick 上显示 DatePicker。 (您必须设置一个处理函数,当用户使用此选择器选择日期时将调用该处理函数。请参阅 DatePicker.handler 配置选项)

【讨论】:

同意。您还必须覆盖 parseDate 以及可能会变得过于复杂的其他内容。 (虽然我质疑一个兼作日期字段和数字字段的字段的可用性,但这是一个不同的问题。) @bmoeskau 同意可用性,但设计不是我的职责。 @amoi 感谢您的建议,但日历选择器按钮是绝对必须的。我可能会回到设计并拥有两个领域。或者使用文本字段并让 actioncol 弹出日历选择器。谢谢 @Luke - 您可以使用触发器字段而不是文本字段在文本字段上弹出日期选择器。答案已编辑以反映这一点。

以上是关于ExtJS 'datefield' 验证覆盖的主要内容,如果未能解决你的问题,请参考以下文章

Extjs 4.1 datefield - 设置本周的第一天和最后一天

extjs datefield iso格式?

extjs计算两个DateField所间隔的月份(天数)

Extjs datefield手动显示选择器

Datefield Extjs显示少于100的年份

Extjs Datefield 在 chrome 中不显示日历