当您在 SmartGWT 中禁用 DynamicForm 时,表单中的所有项目都将被禁用并因此无响应。这是预期的正确行为。
问题是如果表单中有折叠的SectionItem,则在重新启用表单之前无法展开它们。当表单被禁用时,是否有一种简单的方法可以使部分交互?
当您在 SmartGWT 中禁用 DynamicForm 时,表单中的所有项目都将被禁用并因此无响应。这是预期的正确行为。
问题是如果表单中有折叠的SectionItem,则在重新启用表单之前无法展开它们。当表单被禁用时,是否有一种简单的方法可以使部分交互?
SectionItem 是 FormItem,其绘图由包含 DynamicForm 处理。
检查http://forums.smartclient.com/showthread.php?t=15008。
在实现所需行为方面存在以下选项。
这些选项不会禁用表单的整个画布。
选项1:
使用以下方法代替form.setDisabled(true|false)
as setFormDisabled(form, true|false);
。
private void setFormDisabled(DynamicForm form, boolean isDisabled) {
FormItem[] fields = form.getFields();
for (FormItem field : fields) {
if (!(field instanceof SectionItem)) {
field.setDisabled(isDisabled);
}
}
}
选项 2:
覆盖form.*Disabled()
方法并用作form.setDisabled(true|false)
.
DynamicForm form = new DynamicForm() {
private boolean isDisabled;
@Override
public boolean getDisabled() {
return isDisabled;
}
@Override
public void setDisabled(boolean disabled) {
this.isDisabled = disabled;
setFormDisabled(this, disabled);
}
};
如果需要以不同的形式启用多种类型的项目,则可以使用泛型来增强这一点。