我在ExtJs中有这个表单。如果field1不为空,则field2不能为空。但即使听众正在解雇,它也无法正常工作。
{
xtype: 'panel',
title: 'title 1',
items: [{
xtype: 'fieldset',
title: 'field A',
items: [{
xtype: 'textfield',
fieldLabel: 'Line 1',
id: 'field1',
listeners: {
change: function(f, new_val) {
if (new_val) {
//alert("change" + new_val);
f.field2.allowBlank = false;
} else {
f.field1.allowBlank = true;
}
}
}
code for field2
}]
}]
}
答案 0 :(得分:5)
部分答案:
您的代码不起作用的原因是因为allowBlank是配置值 - 它仅在创建组件时有效。我一直看到这个错误 - 在浏览API文档时,您需要记住所有这些配置选项仅在创建对象时有效 - 它们不是可以设置为修改现有对象行为的公共属性
那就是说,我很惊讶API中没有setAllowBlank()方法。如果我能找到办法,我会继续环顾四周并修改这个答案。
编辑:通过阅读TextField源代码,您的方法应该工作。所以问题是为什么不是。
EDIT2 :您可能无法获得对TextFields的引用。 f.field1
可能没有指出你的想法。您可以通过向TextField配置添加ref:'field1'
来解决此问题。然后你的FormPanel将有一个名为field1的属性,你可以参考。
答案 1 :(得分:2)
您可以使用markInvalid函数。例如:
if (new_val) {
if(f.field2.getValue() == ''){
f.field2.markInvalid('Cannot be empty');
}
} else {
// clears invalid flags on the field.
f.field1.clearInvalid();
}
不是说这是使用的确切代码,但您可以从中看到如何标记无效和清除无效消息。虽然我不确定它是否完全符合您的需求,但也可以创建自己的验证器。