我正在使用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。
答案 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);