Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gwt 是否有更好的模式仅在值非空时显示OptionalFieldEditor?_Gwt_Design Patterns_Gwt Editors - Fatal编程技术网

Gwt 是否有更好的模式仅在值非空时显示OptionalFieldEditor?

Gwt 是否有更好的模式仅在值非空时显示OptionalFieldEditor?,gwt,design-patterns,gwt-editors,Gwt,Design Patterns,Gwt Editors,我已经创建了一个由很多很多子编辑器组成的大型编辑器。其中一些需要处理可选的子结构,我将它们包装在OptionalFieldEditor中 现在的问题是,我只想显示那个些子结构,若有这样的结构,若并没有,我想显示一个创建按钮 到目前为止,没有问题:如果我没有这个结构,只要用户单击create按钮,我就会隐藏编辑器面板,并使其可见 如果编辑器从一开始就已经填充了结构,则会出现问题。OptionalFieldEditor将不允许我获得通知或读取值以采用初始状态的显示。因此,无论值是多少,编辑器都保持不

我已经创建了一个由很多很多子编辑器组成的大型编辑器。其中一些需要处理可选的子结构,我将它们包装在
OptionalFieldEditor

现在的问题是,我只想显示那个些子结构,若有这样的结构,若并没有,我想显示一个创建按钮

到目前为止,没有问题:如果我没有这个结构,只要用户单击create按钮,我就会隐藏编辑器面板,并使其可见

如果编辑器从一开始就已经填充了结构,则会出现问题。OptionalFieldEditor将不允许我获得通知或读取值以采用初始状态的显示。因此,无论值是多少,编辑器都保持不可见,或者编辑器是可见的,但未设置任何值

为了解决这个问题,我实现了一个派生的
OptionalField
编辑器,如果调用了
setValue()
方法,它将通知回调

但是我想,这应该是
OptionalFieldEditor
的经典用例,那么为什么我需要发明它呢?也许我只是愚蠢到理解正确的方式,所以我在这里问。这是一个有效的模式,还是编辑器框架中有一个工具可以简化这一过程

代码如下:

public class MyOptionalFieldEditor
        extends OptionalFieldEditor<HwrDefinition, HwrDefinitionEditorView>
{
    public interface ValueHandler {
        void receivedValue(HwrDefinition value);
    }

    ValueHandler handler;

    protected MyOptionalFieldEditor( HwrDefinitionEditorView subEditor, 
                                     ValueHandler handler ) 
    {
        super( subEditor );
        this.handler = handler;
    }

    @Override
    public void setValue(HwrDefinition value) {
        super.setValue( value );
        if( handler != null ) {
            handler.receivedValue(value);
        }
    }
}
公共类MyOptionalFieldEditor
扩展OptionalFieldEditor
{
公共接口ValueHandler{
无效接收值(HWR定义值);
}
ValueHandler;
受保护的MyOptionalFieldEditor(HwrDefinitionEditorView子编辑器,
ValueHandler(处理器)
{
超级(副编辑);
this.handler=handler;
}
@凌驾
公共无效设置值(HwrDefinition值){
super.setValue(值);
if(处理程序!=null){
handler.receivedValue(值);
}
}
}
谢谢


Thomas

我们尝试了OptionalFieldEditor的各种功能,最终得到了与您类似的功能,尽管我们将UI部分和编辑器框架封装到了一个可重用的类中。最重要的是,我们有不同的变化-添加/删除按钮或隐式按钮,在字段中填充将添加/删除封面下的对象

我知道你所说的“它应该做得更多”是什么意思,但我认为它非常符合GWT的理念,即提供基本的构建块,而不是尝试进入不太确定的领域。OptionalFieldEditor本身似乎非常有用

也许你可以在某个地方共享你的代码,以避免别人不得不发明它