ExtJS:validitychange-从有效性检查中排除隐藏的输入字段

时间:2019-03-16 11:49:16

标签: extjs formpanel checkvalidity

我有一个带有两个输入字段“ test1”和“ test2”以及一个组合框的表单。我想验证此表单,输入字段不应为空。因此,我使用配置'allowBlank:false'和控制器方法'onFormValidityChanged'。效果很好。

现在,当我使用控制器方法“ onChangeCombo”动态更改组合框中的值时,我将隐藏输入字段“ test2”。另外,我设置了输入字段'test2'的config'allowBlank:true'。但是当隐藏的输入字段“ test2”为空时,我的表单无效。

如何从有效性检查中排除隐藏的输入字段?

我使用的是ExtJS版本6.6。

托马斯,谢谢你的提示

查看:

    items : [{
        xtype : ' formpanel',
        trackResetOnLoad : true,            
        layout : {
            type : 'vbox',
            align : 'stretch'
        },
        items : [
        {
            xtype : ' textfield',
            name : 'test1'
            itemId : 'test1',
            allowBlank : false,
            fieldLabel : 'test1'
        },
        {
            xtype : ' combobox',
            name : 'combo',
            itemId : 'combo',
            store: myStore,
            listeners : {
                change : 'onChangeCombo'
            }
        },            
        {
            xtype : ' textfield',
            name : 'test2'
            itemId : 'test2',
            allowBlank : false,
            fieldLabel : 'test2'
        }],
        listeners : {
            validitychange : 'onFormValidityChanged'
        }
    }];

控制器:

onFormValidityChanged : function(form, valid) {
    var win, button;
    win = form.owner.up('window');
    button = win.down('[xtype=button]');
    button.setDisabled(!valid);
}, 

onChangeCombo : function(combobox) {
    var win, test2;
    win = combobox.up('window');
    test2 = win.down('textfield[itemId=test2]');
    test2.hide();
    test2.allowBlank = true;
}

2 个答案:

答案 0 :(得分:1)

要关闭验证,只需禁用此隐藏的输入即可。

test2.disable();

我也对您有建议:

  • 使用test2.setAllowBlank(true)代替test2.allowBlank = true

  • 不要使用诸如win.down(etc。)之类的引用,而是使用引用和查找方法检出ViewController选项

答案 1 :(得分:0)

诺贝克的提议

test2.disable()

不提供解决方案。我不知道为什么...

我没有遵循dh117的formBind建议。 我如下解决了这个问题:

test2 = win('textfield[itemId=test2]');
win.remove(test2);

感谢您的提示,也感谢其他提示, 托马斯