2010-12-07 149 views
4

我在ExtJs中有這種表單。如果field1不爲空,則field2不能爲空。但即使聽衆正在開槍,它也不起作用。ExtJs表單驗證問題

{ 
xtype : 'panel', 
title : 'title 1', 
items : [{ 
    xtype : 'fieldset', 
    title : 'field A', 
    items : [{ 
     xtype : 'textfield', 
     fieldLabel : 'Line 1', 
     id : 'field1', 
     listeners: { 
      change: function(f, new_val) { 
      if (new_val) { 
       //alert("change" + new_val); 
       f.field2.allowBlank = false; 
      } else { 
       f.field1.allowBlank = true; 
      } 
     } 
    }, 
      code for field2 
      ] 
} 

回答

5

部分答案:

您的代碼不工作的原因是因爲allowBlank是配置值 - 它只有在創建組件時的效果。我總是看到這個錯誤 - 瀏覽API文檔時,需要記住所有這些配置選項在創建對象時只有效 - 它們不是公共屬性,您可以設置它們來修改現有對象的行爲。

這就是說,我很驚訝API中沒有setAllowBlank()方法。如果我能找到解決方法,我會繼續環顧四周,修改這個答案。

編輯:看來你的方法應該工作,從我閱讀的TextField源代碼。所以問題是爲什麼不是。

EDIT2:您可能無法獲得對TextFields的引用。 f.field1可能並未指向您的想法。您可以通過將ref:'field1'添加到TextField配置來​​解決此問題。然後你的FormPanel將會有一個名爲field1的屬性,你可以參考。

+0

我同意allowBlank是一個配置值,應該這樣使用它,但仍然可以像使用屬性一樣使用它。我在之前的項目中做過,並且能夠獲得OP描述的所需功能。現在我只需要等到回到家後才能記住如何去做:P。不要誤解我的意思,代碼肯定是一團糟。 – McStretch 2010-12-07 18:50:30

2

您可以使用markInvalid函數。例如:

if (new_val) { 
    if(f.field2.getValue() == ''){ 
     f.field2.markInvalid('Cannot be empty'); 
    } 
} else { 
    // clears invalid flags on the field. 
    f.field1.clearInvalid(); 
} 

不是說這是確切的代碼使用,但你可以從中看到如何標記無效和清除無效消息。也有創建自己的驗證器的能力,但我不確定它完全適合您的需求。