2011-09-06 83 views
2

我該如何做一個驗證函數,當IN1> OU1或IN2> OU2時給我一個錯誤?Extjs GridPanel驗證

這是我的代碼(與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', { 
    }) 
] 
} 

回答

0

而不是使用getCmp(除非調試,否則您絕不應該這樣做),請將數據與Store中的值進行比較。

+0

你可以給我發個示例嗎? –

+1

我認爲這應該是一個評論下面的其他答案。這種方式(不含上下文)感覺真的很奇怪。也許你沒有足夠的代表發表評論......這裏有一些。 –

4

我認爲最好的方法是使用現場的validator配置:

// ... 
{ 
    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

+0

我只是嘗試,但我收到此錯誤: Ext.getCmp(「editF02ORAOU1」)的getValue()爲null 但在我的網格中有所有列的各列中的數據! 我該怎麼辦? –

+0

@jack,我已經更新了我的答案並添加了[demo](http://jsfiddle.net/molecule/zzqtS/2/) –

+0

非常感謝你的例子!我嘗試但我不知道爲什麼我收到此錯誤:值是未定義的 [Interrompi per questo errore] return Function.prototype .... ctor.apply(Function.prototype,args); –