2017-10-12 100 views
0

我有一些textFieldfieldcontainer這樣的面板:ExtJS的:文本字段allowblank與條件

Ext.apply(this, { 

       items: [{ 
        padding: '0 10 5 10', 
        xtype: 'textfield', 
        name: 'data', 
        id:'data', 
        alType: 'data', 
        labelWidth: 130, 
        fieldLabel: i18n.get('label.data'), 
        allowBlank: false, 
        enforceMaxLength: true, 
        maxLength: 8, 
        minLength: 1, 
        allowDecimals : false, 
        allowExponential : false, 
        invalidText: i18n.get('error.bad.data'), 
        maskRe: /[0-9]/ 
       }, { 
        xtype: 'fieldcontainer', 
        layout: 'hbox', 
        defaultType: 'textfield', 
        items: [{ 
         padding: '0 10 5 10', 
         width:285, 
         xtype: 'datefield', 
         name: 'date', 
         id:'date', 
         alType: 'date', 
         format : 'd/m/Y', 
         labelWidth: 130, 
         fieldLabel: i18n.get('label.date'), 
         allowBlank: false, 
        },{ 
         xtype: 'timefield', 
         padding: '0 10 5 15', 
         width:230, 
         name: 'hour', 
         id:'hour', 
         labelWidth: 80, 
         fieldLabel: i18n.get('label.hour'), 
         minValue: '00:00', 
         maxValue: '23:00', 
         format: 'H:i', 
         increment: 60, 
         anchor: '100%', 
         allowBlank: false, 
        }] 
       }] 
     }); 
     this.callParent(arguments); 

而且我想補充的「allowBlank」的條件:

- 默認情況下所有allowBlank是false

- 如果有日期和小時data => allowBlanktrue

如果有日期和hour => allowBlank的數據是true

我該怎麼做?

對不起,我的英語不好。

謝謝

+1

給一些搗鼓代碼 – Tejas

+0

對不起,我不知道爲什麼,但「你好」丟失.. – Bartac

+0

你應該寫一個定製的驗證。 –

回答

0

你可以像下面: -

field.allowBlank = YOUR_DATA.allowBlank; // data => allowBlank 
field.validateValue(field.getValue()); 

希望這有助於。

0

您可以通過使用ViewModel來實現此目的。

如果您使用的是標準MVC(模型視圖控制器),我會假定您已經知道如何使用控制器。

在你的控制器,你設置你的數據時刻:

控制器代碼片段:

me.getViewModel().set('isThereData', data) 
me.getViewModel().set('isThereDate', dateAndHour) 
  • 注:這是沒有必要啓動對你的ViewModel這個變量。

在您查看代碼片段:

xtype : 'textfield', 
fieldLabel : 'data', 
bind : { 
    allowBlank : '{isThereDate}' 
} 

xtype : 'textfield', 
fieldLabel : 'Date and Hour', 
bind : { 
    allowBlank : '{isThereData}' 
} 
  • 直通結合,你對你的視圖模型設置的值將與您查看的值同步。如果它不是空
  • ExtJS的自動翻譯 '{isThereData}' 真
0

它很簡單:

獲得配置或init()方法的數據:

allowBlank:(data.rec.hour)?'true':'false'; 

這一定會奏效。 如果你想使用它的樣改變聽衆或再集中,

onChangeCheckbox:function(cmp, newValue, oldvalue){ //it is recomended to use allowBlank in listners instead. 
      var me=this, 
      form=cmp.up('form'), 
      field=form.down('#foldername'), 
      field.allowBlank=!newValue; 
       //(please set condition accordingly Above.) 
     }, 
0

試試這個

var yourField = Ext.getCmp('comboBoxID'); 
if(your_condition == true){ 
    Ext.apply(yourField,{allowBlank:true}); 
}else { 
    Ext.apply(yourField,{allowBlank:false}); 
} 
0

您可以使用函數像下面。

function setAllowBlank(field, allowBlank) { 
    if (field.allowBlank != allowBlank) { 
    Ext.apply(field, allowBlank); 
    } 
} 

用法:

var field = Ext.getCmp('date'); 
setAllowBlank(field, true);