2010-03-22 11 views
8
... 
<g:VerticalPanel styleName="{style.mainVerticalPanel}"> 
    <g:SplitLayoutPanel> 
    <g:north size="700"> 
     <g:VerticalPanel> 
       <g:ScrollPanel styleName="{style.conversationPanelContainer}"> 
        <g:FlexTable ui:field="conversationPanel" styleName="{style.conversationPanel}"></g:FlexTable> 
       </g:ScrollPanel> 
       <g:HorizontalPanel styleName="{style.messageTextAndSendPanel}"> 
        <g:TextBox ui:field="messageText" styleName="{style.messageText}"></g:TextBox><g:Button ui:field="sendButton">Send</g:Button> 
       </g:HorizontalPanel> 
     </g:VerticalPanel> 
    </g:north> 
    <g:south size="300"> 
    <g:button>TestButton</g:button> 
    </g:south> 
    </g:SplitLayoutPanel> 
</g:VerticalPanel> 
... 

C'è qualcosa che non va? Tutto quello che sto cercando di fare è creare un semplice pannello diviso, ma ogni volta che eseguo tutto ciò che ottengo è una pagina vuota. Senza nessuna delle cose SplitPanel, funziona perfettamente. Lo stesso succede con DockLayoutPanel.Non riesco a far funzionare SplitLayoutPanel - GWT + UIBinder mi sta facendo impazzire

+0

Nessuna eccezione? (sia in DevMode che in Firebug/altra console del browser) –

+0

Al momento sono lontano dal mio PC di lavoro, quindi non posso dirlo con certezza, ma ricordo di aver visto alcune chiamate RPC inviate nella finestra della console di Firebug (I avere una chiamata RPC che esegue ogni x minuti), nonostante la mancanza di interfaccia utente. Se ci fossero delle eccezioni, niente funzionerebbe affatto, giusto? –

risposta

7

OK, capito di lavoro (vedi più vecchio versioni di questa risposta per tentativi precedenti;)).

La mia soluzione è basata su Mail example. Il codice di lavoro:

public class SplitTest implements EntryPoint { 

    private static TestUiBinder uiBinder = GWT.create(TestUiBinder.class); 

    interface TestUiBinder extends UiBinder<SplitLayoutPanel, SplitTest> { 
    } 

    /** 
    * This is the entry point method. 
    */ 
    public void onModuleLoad() { 
     SplitLayoutPanel outer = uiBinder.createAndBindUi(this); 

     RootLayoutPanel.get().add(outer); 
    } 
} 

UiBinder * .ui.xml:

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> 
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" 
    xmlns:g="urn:import:com.google.gwt.user.client.ui"> 
    <ui:style> 
    .conversationPanelContainer, .conversationPanel, .messageTextAndSendPanel, .messageText { 
     font-weight: bold; 
    } 
    </ui:style> 
    <g:SplitLayoutPanel> 
    <g:north size="700"> 
     <g:VerticalPanel> 
       <g:ScrollPanel styleName="{style.conversationPanelContainer}"> 
        <g:FlexTable ui:field="conversationPanel" styleName="{style.conversationPanel}"></g:FlexTable> 
       </g:ScrollPanel> 
       <g:HorizontalPanel styleName="{style.messageTextAndSendPanel}"> 
        <g:TextBox ui:field="messageText" styleName="{style.messageText}"></g:TextBox><g:Button ui:field="sendButton">Send</g:Button> 
       </g:HorizontalPanel> 
     </g:VerticalPanel> 
    </g:north> 
    <g:south size="300"> 
    <g:Button>TestButton</g:Button> 
    </g:south> 
    </g:SplitLayoutPanel> 
</ui:UiBinder> 

nota una serie di cose:

  • Prima di tutto: avete avuto un errore nel vostro XML UiBinder modello: è <g:Button>, non <g:button> (maiuscole e minuscole)
  • L'uso di RootLayoutPanel invece di noi UAL RootPanel
  • Sono ancora un po 'confuso circa l'intero LayoutPanel s thingy - nel Mail example usano un SplitLayoutPanel nidificato in un DockLayoutPanel, ma solo il DockLayoutPanel è esplicitamente aggiunto alla RootLayoutPanel - sono io a capire che il SplitLayoutPanel automagicamente viene anche aggiunto (in modo che possa ricevere eventi di ridimensionamento, ecc.)? Che ne dite di altri Widget nidificati nel LayoutPanel principale? Devono essere esplicitamente aggiunti allo RootLayoutPanel o solo se sono la radice di quel Widget/Composito o non è nemmeno possibile? Non ho davvero tempo per perseguire questo obiettivo - lo lascerò come compito a qualcun altro;)

BTW: Ho controllato questo codice in modalità Quirks e modalità Standard - I don ' Per vedere una differenza, entrambi funzionano O_o (tuttavia, questo è un semplice uso di SplitLayoutPanel - esempi più complessi probabilmente daranno qualche strano comportamento in modalità Quirks e/o errori di rendering)

+0

PENSO Ho già provato questo quando stavo cercando di far funzionare DockLayoutPanel, ma ci riproverò di nuovo quando torno sul mio PC di lavoro. Grazie. :) –

+0

Dovrebbe essere simile a DockLayoutPanel. Vedi http://stackoverflow.com/questions/2493101/how-do-i-use-splitlayoutpanel-with-uibinder – Carnell

+0

Hai controllato anche nella modalità di stranezza di IE? Di solito funziona nella modalità di quirks di Firefox. –

2

Quale doctype stai utilizzando? Questi pannelli funzionano solo in modalità standard (almeno con alcuni broswers). Se si utilizza la modalità quirk, accade spesso che si ottenga una pagina vuota con questi pannelli.

Controlla il tuo file HTML. Dovrebbe iniziare idealmente con:

<!DOCTYPE html> 

Oppure, in alternativa qualche altro tipo di documento che si traduce in modalità standard (ma assicuratevi di digitare in 100% testualmente), vedi http://hsivonen.iki.fi/doctype/

+0

Ciao, il mio doctype è impostato su ciò che hai suggerito, ma sfortunatamente non funziona ancora. :( –

+0

Solo per essere sicuri: si trova nella prima riga dell'HTML risultante che viene inviato al browser (potrebbe non esserci nemmeno un commento sopra di esso)? –

+0

È anche possibile controllare rapidamente in quale modalità Firefox esegue il rendering della pagina fare clic con il tasto destro del mouse -> Visualizza informazioni sulla pagina e verificare il valore della modalità di rendering. –

Problemi correlati