ExtJS的:文本字段allowblank与条件

问题描述:

我有一些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

你应该写一个定制的验证。 –

你可以像下面: -

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

希望这有助于。

您可以通过使用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}' 真

它很简单:

获得配置或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.) 
     }, 

试试这个

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

您可以使用函数像下面。

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

用法:

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