Extjs GridPanel 验证

Posted

技术标签:

【中文标题】Extjs GridPanel 验证【英文标题】:Extjs GridPanel validation 【发布时间】:2011-09-06 11:00:26 【问题描述】:

当 IN1>OU1 或 IN2>OU2 时,我该如何做一个验证函数让我出错??

这是我的代码(带有 roweditor 插件的网格面板)


 xtype: 'gridpanel',
 height: 250,
 width: 400,
 title: 'My Grid Panel',
 columns: [
           
             xtype: 'datecolumn',
             text: 'IN1',
             dataindex 'F02ORAIN1',
             field: 
               xtype: 'timefield',
               id 'editF02ORAIN1'
             
           ,
           
             xtype: 'datecolumn',
             dataindex 'F02ORAOU1',
             text: 'OU1',
             field: 
               xtype: 'timefield',
               id 'editF02ORAOU1'
             
           ,
           
              xtype: 'datecolumn',
              text: 'IN2',
              dataindex 'F02ORAIN2',
              field: 
                xtype: 'timefield',
                id 'editF02ORAIN2'
              
           ,
           
             xtype: 'datecolumn',
             text: 'OU2',
             dataindex 'F02ORAOU2',
             field: 
               xtype: 'timefield',
               id 'editF02ORAOU2'
            
          
 ],
 plugins: [
    Ext.create('Ext.grid.plugin.RowEditing', 
    )
 ]

【问题讨论】:

【参考方案1】:

我认为最好的方法是使用字段的validator config:

// ...

    xtype: 'datecolumn',
    text: 'IN1',
    dataIndex: 'F02ORAIN1',
    field: 
        xtype: 'timefield',
        id: 'editF02ORAIN1',
        validator: function(value) 
            if (!Ext.getCmp('editF02ORAOU1').getValue()) return true;
            if (this.getValue() > Ext.getCmp('editF02ORAOU1').getValue())
              return 'IN1 should be less then OU1';
            return true;
        
    
, 
    xtype: 'datecolumn',
    dataIndex: 'F02ORAOU1',
    text: 'OU1',
    field: 
        xtype: 'timefield',
        id: 'editF02ORAOU1'
    
,
// ...

Here is demo

【讨论】:

我刚刚尝试过,但收到此错误:Ext.getCmp("editF02ORAOU1").getValue() 为空,但在我的网格中,所有行的所有列中都有数据!我该怎么办? @jack,我已经更新了我的答案并添加了demo 非常感谢你的榜样!!我尝试了一下,但我不知道为什么会收到此错误:值未定义 [Interrompi per questo errore] return Function.prototype....ctor.apply(Function.prototype, args); 如果要在表单验证的时候验证,网格是否包含记录(什么情况下有效)?【参考方案2】:

不要使用 getCmp(除非调试,否则永远不要这样做),而是从 Store 获取数据以与值进行比较。

【讨论】:

你能给我发个例子吗? 我认为这应该是另一个答案下方的评论。这样(断章取义)感觉真的很奇怪。也许你没有足够的代表来发布 cmets...这里有一些。

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

无废话ExtJs 入门教程十七[列表:GridPanel]

在 Extjs 中删除 GridPanel 的 headertoolbar

ExtJs - 通过 Gridpanel 的索引获取行

extjs gridpanel:当 GridPanel 窗口再次显示时,ColumnModel 变为空

ExtJS 4.1 GridPanel 错位列

ExtJS 3.4.0 GridPanel 有条件地禁用行