0

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

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

到目前为止,没问题:如果我开始时没有该结构,我将简单地隐藏编辑器面板,并使其可见,只要用户单击创建按钮。

如果编辑器从一开始就已经填充了结构,则会出现问题。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);
        }
    }
}

谢谢,

托马斯

4

1 回答 1

0

尽管我们将 UI 部分和管理编辑器框架封装到一个可重用的类中,但我们使用 OptionalFieldEditor 尝试了各种不同的东西,最终得到了与您所拥有的类似的东西。最重要的是,我们有不同的变体——添加/删除按钮或隐式按钮,其中填写字段将添加/删除封面下的对象。

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

也许您可以在某个地方共享您的代码以节省其他人必须发明它的时间?

于 2014-12-02T13:24:47.303 回答