2011-02-26 16 views
8

ile Anchor'da widget'ların gömülmesi Aşağıdakileri UIBinder'da kullanmak istiyorum, böylece kodumdaki bağlantının href'unu program aracılığıyla ayarlayabilirim. Bunu çalıştığınızdaGWT: UIBinder

<g:HTMLPanel> 
    <g:Anchor ui:field="link"> 
     <g:InlineLabel ui:field="firstName"/> 
     <g:InlineLabel ui:field="lastName"/> 
    </g:Anchor> 
</g:HTMLPanel> 

alıyorum:

ERROR: Found widget in an HTML context Element <g:InlineLabel ui:field='firstName'> (:7). 

nasıl bir çapa içine widget katıştırabilirim?

<a id="myAnchor"> 
    etc... 
    </a> 

Sonra HREF ayarlamak için benim kod DOM manipüle ama bu çirkin: Daha önce kullandığım başvurdu ettik. Daha iyi bir yolu var mı?

+0

Neden InlineLabel widget'larını kullanıyorsunuz? Bunun yerine s veya benzeri bir elemanı kullanamaz mısınız? –

+0

@ Thomas- InlineLabels kullanıyorum çünkü program aracılığıyla bunları güncellemeliyim. InlineLabel bir açıklık oluşturur. –

cevap

6

Bir Paneli (Akış veya Yatay) kullanmak ve bir bağlantıyı simüle etmek için panele tıklatma işleyicileri eklemek daha iyidir. Anchor, Button ve benzeri widget'lar içlerinde çocuk etiketlerine izin vermez.

+0

ClickHandlers'ı doğrudan satır içi etiketlerine ekledim. Aksi halde Flow/HorizontalPanel'i bir FocusPanel'e eklemem gerekir. İç çek, bu daha kolay olmalı. –

+0

google paletli web sitemin yapısını anlamıyor gibi benim gwt web sitelerinde bağlantı elemanları kaçınmak için endişeleniyorum. Anchor/Hyperlink'in widget'lara sahip olmasına neden bu kadar sorunlu? –

+0

@ DraškoKokić Bence GWT sayfa yapmak değil, uygulama yapmak. Bu yüzden arama motorları umursamıyor. –

14

Aşağıdaki sınıf, bir SimplePanel gibi çalışır (yani, içine bir widget koyabilirsiniz), ancak "div" yerine "a" kullanır. Daha fazla widget'a ihtiyacınız varsa, başka bir panel yerleştirin.

import com.google.gwt.user.client.DOM; 
import com.google.gwt.user.client.ui.SimplePanel; 

public class Link extends SimplePanel { 
    public Link() { 
     super(DOM.createAnchor()); 
    } 

    private void setHref(String href) { 
     getElement().setAttribute("href", href); 
    } 

    private String getHref() { 
     return getElement().getAttribute("href"); 
    } 

    public void setTarget(String frameName) { 
     getElement().setAttribute("target", frameName); 
    } 
}