ExtJS: textfield allowBlank with conditions

时间:2017-10-12 09:49:37

标签: javascript extjs extjs4

I have a panel with some textfield and fieldcontainer like this:

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);

And I would like to add a condition for allowBlank :

  • By default all allowBlank are false

  • if there is a data => allowBlank for date and hour is true

  • if there are a date and a hour => allowBlank for data is true

How can I do this please ?

Sorry for my bad English.

Thank you

5 个答案:

答案 0 :(得分:0)

你可以这样做: -

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

希望得到这个帮助。

答案 1 :(得分:0)

您可以使用ViewModel

来实现此目的

如果您使用的是标准MVC(模型视图控制器),我将假设您已经知道如何使用controller

controller中,您设置数据的那一刻:

控制器代码段:

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}'
    }
}
  • 通过绑定,您在ViewModel上设置的值将与View上的值同步。
  • Extjs自动翻译' {isThereData}'如果它不是空的,则为true。

答案 2 :(得分:0)

非常简单:

以config或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.)
        },

答案 3 :(得分:0)

试试这个

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

答案 4 :(得分:0)

您可以使用以下功能。

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

用法:

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