1

今天早上我问了这个问题,并得到了一个非常好的答案。我现在正在尝试对设计进行原型设计,并且遇到了类似(但不相同)的问题。本质上,我试图拥有一个 100% 配置驱动的 GWT UI,其中对 DB 的更改可以产生完全不同的 UI,但无需任何代码更改。

我的架构很简单:

  • 我将使用单独的工具(或首先手动)生成 .xul (XUL) 文件并将其保存到数据库;可能是像 Mongo 这样的文档数据库或类似的东西
  • 在服务器端,我将编写一个XulParser从数据库中读取 XUL 文件并将其转换为ContainerProxy实例 的程序
    • AContainerProxy是我的“代理”,相当于 acom.google.gwt.user.client.ui.Panel或类似的东西;它只是一个包含其他小部件代理列表的 bean/POJO(请参见下面的代码片段)
    • 例如,我可能有一个定义Button如下的 XUL 文件
    • ButtonProxy将被添加到ContainerProxy(以及同一容器/视图/面板中的任何其他 UI 小部件)
  • 在客户端,我将查询ContainerProxy 不知何故 (???),并将其从服务器上拉下来。
  • 然后,我将有一个机制,将 的每个ContainerProxy子项(ButtonProxy等)转换为实际的 UI 小部件。

这样,起初我可以将某个 XUL 文件放入数据库,而 UI 上可能只包含“立即订购”按钮。但是以后,我可能想要使用完全不同的 UI,所以我设计了一个不同的 XUL 文件,更新了数据库中的文档,并且 - 瞧 - 所有用户的 UI 都会更改,而无需任何代码更改。请注意:我知道这不是一种正常的做事方式:我有一个特殊的用例,我需要这种配置驱动的 UI。

为了帮助阐明 XUL 解析过程:

<button id="order" label="orderNow" clickHandler="org.myapp.OrderButtonHandler" />

after the XulParser reads the above snippet, we get:

ButtonProxy orderButton = new ButtonProxy("order", "OrderNow");
orderButton.addClickHandler(new OrderButtonHandler());

无论如何,我的问题:

  1. 我需要在客户端做些什么来查询我的ContainerProxy? 任何人都可以提供伪代码来帮助我将其可视化吗?
  2. 一旦我有了ContainerProxy客户端,我可以使用哪些 UI 机制将代理类转换为实际的 UI 小部件?UIBinder 可用吗?同样,有人可以提供一些伪代码吗?

在此先感谢您的帮助!

4

1 回答 1

1

这是一个可以做你想要的代码的想法。我尚未对此进行测试,但您可以从中了解这一切如何协同工作。

    String htmlFragment = "<div><button id='action1' type='button>Action 1<button/><div/>";

    HTMLPanel container = new HTMLPanel(htmlFragment);

    RootLayoutPanel.get().add(container);

    Element button1El = container.getElementById("action1");

    if(button1El != null){
        Button button1 = Button.wrap(button1El);
        button1.addClickHandler(new ClickHandler(){

            @Override
            public void onClick(ClickEvent event) {
                // What you want button 1 to do
            }

        });
    }
于 2013-05-12T11:36:06.323 回答