0

我有一个包含两个输入字段“test1”和“test2”以及一个组合框的表单。我想验证这个表单,输入字段不应该是空的。因此,我使用配置“allowBlank:false”和控制器方法“onFormValidityChanged”。这工作正常。

现在,当我使用控制器方法“onChangeCombo”动态更改组合框中的值时,我隐藏了输入字段“test2”。另外,我设置了输入字段“test2”的配置“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;
}
4

2 回答 2

1

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

test2.disable();

我也给你一个建议:

  • 使用 test2.setAllowBlank(true) 而不是 test2.allowBlank = true

  • 不要使用 win.down(etc.) 之类的引用,请使用引用和查找方法检查 ViewController 选项

于 2019-03-16T20:36:08.157 回答
0

诺贝克的提议

test2.disable()

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

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

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

感谢您的提示,以及进一步的提示,Thomas

于 2019-03-20T11:21:19.417 回答