【问题标题】:How to change GWT Editor while editing如何在编辑时更改 GWT 编辑器
【发布时间】:2014-06-12 13:25:17
【问题描述】:

我有一个 GWT 表单,它会根据其中选择的内容更改某些字段。表单使用Editor、Driver GWT模块

故事是一个编辑她的个人资料的人,并说:“我是用户”或“我是卖家”(最终“我是别的东西”) 因此,根据其自身形式的选择,我想更改视图中的一些编辑器(一个人的名字,姓氏变成公司名称,税号,而许多其他字段保持不变但改变了他们的位置)。我制作了两组 UiBinder 屏幕(每个配置文件一组)。我有一个主 UiBinder,其中包含处理这些子编辑器的复选框“我是一家公司”

到目前为止,我认为我可以做的是我有一个带有子编辑器的 ValueAwareEditor

@Path("")
@UiField
protected CompanyBasicInfo basicInfoComp;

@Path("")
@UiField
protected PersonBasicInfo basicInfoPers;

两者都由驱动程序填充,但只有一个可见。

问题是我不喜欢在许多编辑器中拥有相同属性的想法,这种方法也不能暗示性能

另一方面,CompanyBasicInfo 和 PersonBasicInfo 是常规的编辑器实现。所以在他们两个上都加上@Ignore 是不可能的,因为我不能在需要的时候对他们调用 setValue()。

还让他们实现 ValueAwareEditor 对我来说不是很清楚,因为包含常规的编辑器小部件,所以我仍然无法在他们的字段上调用 ​​setValue() :我只是让问题更进一步......

在视图中,我也无权访问驱动程序以再次调用 edit()。我在列表中查看了它是如何完成的,但是有太多新概念,我认为我不必学习所有代码就可以处理这个简单的案例

谢谢你的回答

【问题讨论】:

  • 您能否至少包含您的 ui.xml 文件的部分内容以及子编辑器,以便为您的问题提供更多背景信息?它是您要编辑的单个大型 POJO 对象吗?
  • 嗨,Amir,是的,我正在编辑一个可以托管所有配置文件的大型 Pojo。我的 UiBinder 代码中没有什么有趣的地方,里面有一些简单的字段。相关的是如何按需切换和填充 UiBinder 数据(根据用户选择)我添加了一个屏幕截图以更好地解释

标签: gwt gwt-editors


【解决方案1】:

由于编辑器框架将处理您已交付到编辑器中的同一对象,因此您可以在编辑过程中节省地添加缺失的部分。

我想,我会尝试使用 OptionalFieldEditor 或 ValueAwareEditor 和 Subeditor 的组合来解决它。

主要结构可能是这样的

public class Person implements Serializable 
{
    private CompanyBasicInfo companyInfo;  // nullable
    private PersonBasicInfo personInfo;    // nullable
    private String fooBar;

    [ ... add getters and setters ... ]
}

然后编辑器将至少实现 ValueAware

public class PersonEditor implements ValueAwareEditor<Person>
{
    @UiField
    CompanyBasicInfoEditor companyInfo;
    @UiField
    PersonBasicInfoEditor personInfo;
    @UiField
    TextBox fooBar;

    // You may not want to use this, but rather have some other handlers.
    @UiField
    Button btnAddPerson;
    @UiField
    Button btnAddCompany;

    @Path("")
    SimpleEditor<Person> myValue;

    @Override 
    public void setValue(Person value) {
        companyInfo.setVisible(value.getCompanyInfo() != null);
        personInfo.setVisible(value.getPersonInfo() != null);
    }

    @UiHandler("btnAddCompany")
    protected void onAddCompany(ClickEvent ev) {
        CompanyBasicInfo bci = new CompanyBasicInfo();
        myValue.getValue().setCompanyInfo(bci);
        companyInfo.setValue(bci); // the setValue() function handles the prior unset optional field editor
    }

    @UiHandler("btnAddPerson")
    protected void onAddPerson(ClickEvent ev) {
        PersonBasicInfo bci = new PersonBasicInfo();
        myValue.getValue().setPersonInfo(bci);
        personInfo.setValue(bci); // the setValue() function handles the prior unset optional field editor
    }

[ ... remaining stuff ... ]
}

子编辑应该是IsEditor&lt;OptionalFieldEditor&gt;。您可以在 gwtproject 页面 iirc 上找到 OptionalFieldEditors 的示例。

希望这对您有所帮助。

【讨论】:

  • 嗨,我手动处理了这个问题,我忘记了我所处的上下文。当我回到那部分时,我会看看你的建议。自从您将我介绍给我不知道/认为的 OptionalFieldEditor 后,我投了赞成票(如果我的记忆正确的话)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多