当一个小部件已经包含在另一个小部件中时,如何用小部件替换它?

时间:2009-10-03 19:28:29

标签: java gwt gxt gwt-ext

我正在使用Ext-GWT,我认为ListView是我需要的正确布局。我的问题是我必须为我的所有项目使用HTML模板,但我想构建GWT / Ext-GWT小部件,所以我使用div占位符,我将替换为正确的小部件。

如何用小部件替换div?我的第一次尝试是使用RootPanel.get('div-id'),但显然你不能创建一个小部件中的RootPanel(我使用调试模式来逐步执行代码,直到我发现了静默异常)。

public class TicketContainer extends LayoutContainer {

    private ArrayList<BasicTicket> tickets;

    public TicketContainer(ArrayList<BasicTicket> tickets) {
        this.tickets = tickets;
    }

    @Override
    protected void onRender(Element parent, int index) {
        super.onRender(parent, index);
        setLayout(new FlowLayout(1));

        ListStore<BasicTicket> store = new ListStore<BasicTicket>();
        store.add(this.tickets);

        ListView<BasicTicket> view = new ListView<BasicTicket>(store);

        view.addListener(Events.Refresh, new Listener<BaseEvent>() {

            @Override
            public void handleEvent(BaseEvent be) {
                for (BasicTicket ticket : tickets) {
                // At this point I need to find the div with the id
                // "ticket_"+ticket.getId() and replace it with a GWT
                // widget that I can add events to and enable drag and drop
                }
            }
        });

        add(view);

    }

    private native String getTemplate() /*-{
        return ['<tpl for=".">', 
        '<div id="ticket_{id}"></div>',
        '</tpl>'].join("");
    }-*/;

}

如果您需要在代码中添加其他上下文,则完整源代码位于https://code.launchpad.net/~asa-ayers/+junk/Kanban

2 个答案:

答案 0 :(得分:2)

在“纯粹的”GWT中,答案是使用HTMLPanel

String id = DOM.createUniqueId();
HTMLPanel panel = new HTMLPanel("<div class=\"content\" id=\"" + id + "\"></div>");

panel.add(new Label("Something cool"), id);

如您所见,com.google.gwt.user.client.ui.HTMLPanel.add(Widget, String)获取带有HTMLPanel的元素的ID,并将Widget放在该元素中。

我没有使用Ext-GWT,但您可以使用HTMLPanel或在Ext-GWT中搜索等效的。

答案 1 :(得分:0)

您也可以在HTML面板中包装现有的div。

HTMLPanel newPanel = HTMLPanel.wrap(Document.get().getElementById("yourDivId"));
newPanel.add(your_widget);