2009-10-03 7 views
1

저는 Ext-GWT를 사용하고 있습니다. 제가 생각한 바로는 ListView이 올바른 레이아웃이라고 생각합니다. 내 문제는 모든 항목에 대해 HTML 템플릿을 사용해야한다는 것입니다. 대신 GWT/Ext-GWT 위젯을 작성하므로 적절한 위젯으로 대체 할 자리 표시자를 div으로 사용하고 있습니다.다른 위젯에 div가 이미 포함되어있는 경우 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

"순수"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 withing에 요소의 ID를 소요하고 해당 요소 내부의 Widget을 배치합니다.

나는 Ext-GWT를 사용하지 않았지만 HTMLPanel을 사용하거나 Ext-GWT에서 다른 값을 검색 할 수 있습니다.

+0

제 경우에는 add()를 호출 할 수 없어서 순수한 GWT 객체를 사용할 수 없습니다. 템플릿을 전달해야하고 Ext-GWT가 변수를 채우고 내 html을 페이지에 놓습니다. 페이지에 HTML을 가져 와서 HTMLPanel을 안에 넣거나 주위에 패널을 래핑하는 방법을 찾고 있습니다. –

+0

그렇다면 GXT가 GWT와 더 유사하다고 생각했습니다. 그럼 LayoutContainer.getItemByItemId는 어떻습니까? 해당 id에서 Component를 가져온 후에는 indexOf를 사용하여 삽입하여 Component를 대체 할 수 있습니다. 나는이 atm을 실제로 시험 할 수는 없지만, 당신이 찾고있는 것 같다. –

0

HTML 패널에서 기존 div를 래핑 할 수도 있습니다.

HTMLPanel newPanel = HTMLPanel.wrap(Document.get().getElementById("yourDivId")); 
newPanel.add(your_widget); 
관련 문제