带编辑器框架的GWT Popup

时间:2012-01-28 06:05:48

标签: gwt popup gwt-editors

在一个简单的库存管理应用程序中,我有一个活动来处理为员工分配设备类型(如果用户检查了一些东西)。我想知道的是:

目前,我已拖放到可以将设备拖到员工的位置。我想要的是,一旦拖动设备,就会打开一个弹出窗口,询问用户确认以及他希望分配的金额。这基本上可以作为围绕两个实体的编辑器(equipmentCheckin和equipmentCheckout)。

以下是我遇到的问题:
1.如果弹出窗口在视图中初始化,然后在放置事件上设置可见(这是我计划做的事情) - 在这样做时你如何正确地初始化编辑器(如果有一个单独的活动调用drop - 我不认为会有编辑部分让我感到困惑。)
2.每个弹出窗口都应该有自己的类和ui.xml文件 - 这是我最初去的方式,然后在drop事件上调用set visible to true(我认为这是正确的方法)

我想我在这里问的主要是验证如何做到这一点,我找不到这个东西的一个体面的例子。

对于任何使用谷歌音乐的人,我想在你去编辑专辑或歌曲信息时做他们正在做的事情 - 我想在幕后他们正在使用带弹出窗口的编辑器 - 我只是想知道什么是正确的实际做到这一点的方法是在我解决问题之前

1 个答案:

答案 0 :(得分:1)

我认为你是在正确的轨道上,使弹出窗口自成一体,如果你可以帮助它,只保留一个实例。

就编辑细节而言,什么是没有意义的?一般的想法是,您可以创建一次驱动程序,使用弹出窗口(实现编辑器)对其进行初始化,然后在每次准备好使用新模型显示驱动程序时调用驱动程序。

我通常会得到类似的东西(假设类扩展了Popup,实现了Editor,并且内部定义了驱动程序)

public MyPopup() {
  //uibinder or other layout
  this.driver = GWT.create(Driver.class);
  driver.initialize(this);
}
public void edit(MyModel model) {
  driver.edit(model);
  show();
}

为了用我自己的方法/偏见调整这个答案,我喜欢MVP设置,其中视图和演示者都是接口,并且演示者impl不知道视图将如何最终绘制。对我来说一般看起来像这样

public interface MyModelEditorView extends Editor<MyModel> {
  // this param is used in a mobile/table situation, where popups aren't as friendly
  void show(AcceptsOneWidget parent);

  // exposes the driver for the presenter * 
  SimpleBeanEditorDriver<MyModel, ?> getDriver();

  void setPresenter(Presenter presenter);

  public interface Presenter {
    // this is the only method that is called externally
    void show(AcceptsOneWidget parent, MyModel model);

    // called by click handlers in the view impl, probably by @UiHandler methods
    void onSaveClicked();
    void onCancelClicked();
  }
}

* Presenter可能应该控制驱动程序,以便它可以检查错误,在需要时从服务器传入错误,编辑新模型,并清除结果。