2011-01-29 22 views
18

Kayıtlarımı göstermek için CellTable kullanıyorum ama şimdi istediğim şey, kullanıcı bir hücreyi tıklattığında bir seçim kutusu göstermektir. Bir şey daha, seçim kutusunun kendi widget'ım, önceden tanımlanmış değil. Bana bunu yapmanın herhangi bir yöntemini önerebilir misin?Hücre Bir Hücre'ye nasıl bir widget yerleştirebilirim?

+0

Lütfen [kullanmayan imzalar veya sloganları] Yayınlarınızda (http://stackoverflow.com/faq#signatures). – meagar

+0

Aynı sorun var - bir tabloda hücrelerdeki bazı oldukça ağır aletler (mantıkları açısından) oluşturmam gerekiyor. CellTable'dan istediğim, bir sütundaki her bir hücrenin oluşturulmasına yönelik bir pencere oluşturmak için kullanılacak bir IsWidget fabrikasını tedarik edebilmekti. Bunu yapmanın kolay bir yolunu göremiyorum ama tabloları sıfırdan uygulamayacağım. – drdozer

cevap

23

GWT google grubunda, the answer'u ele alan bir yayın var. Temel olarak, özel widget'ınızı normal olarak yaratırsınız ve render işlevi içinde widget.getElement(). GetInnterHTML() kullanırsınız.

@Override 
public void render(com.google.gwt.cell.client.Cell.Context context, 
      String value, SafeHtmlBuilder sb) { 
     if (value != null) { 
      MyWidget widget = new MyWidget(value); 
      sb.appendEscaped(widget.getElement.getInnerHTML()); 
     } 
} 
+4

Widget.getElement.getInnerHTML() kullanmak yerine, dış HTML içerdiğinden, widget.getElement.getString() kullanıyorum. –

+1

, her bir hücrenin HTML'sini oluşturmak için aynı widget'ı tekrar kullanmak mümkün mü? (Ben sadece öğrenmek için biraz kod yazmak gerekir ... ama sadece merak uyandırdı ..) – HaveAGuess

2

Bir süre önce benzer bir sorunla karşı karşıya kaldım (CellList hücresine özel bir widget eklemek istedim), ancak maalesef kolay bir çözüm bulamadı. Genel olarak, AbstractCell veya ActionCell ya da ActionCell genişleyen belirli bir hücre sınıfı uygulayabilirsiniz. Bu durumda, render() yöntemini geçersiz kılmanız ve kendi oluşturmayı uygulamanız gerekir. İyi örnek AbstractCell class javadoc'da verilmiştir.

8

Bu, bir desen karşıtıdır. Hücrelerin bütün amacı böylelikle widget'lara sahip olmamanızdır: html'yi doğrudan hücrede "render" etmeniz gerekiyor.

+0

neden onlar daha sonra UIBinder eklendi eklendi? (tam olarak bir alıntı değil, iş parçacığından: http://groups.google.com/group/google-web-toolkit/browse_thread/thread/9cfb4a3b5c4af0be/b75305d15a1c32e8?lnk=gst&q=celltable+widget#b75305d15a1c32e8) – HaveAGuess

+0

, ama bazen kaçınılmaz – jabal

+0

Katılmıyorum, bazen HTML ile uğraşmak istemiyorum ve sadece GWT'nin sizin için widget'lar oluşturmasına izin vermeyin. – RockyMM

7

GWT google grubunda, cevabı ele alan bir yayın var. Temel olarak, özel widget'ınızı normal olarak yaratırsınız ve render işlevi içinde widget.getElement(). GetInnterHTML() kullanırsınız.

@Override 
public void render(com.google.gwt.cell.client.Cell.Context context, String value, SafeHtmlBuilder sb) { 
    if (value != null) { 
     MyWidget widget = new MyWidget(value); 
     sb.appendEscaped(widget.getElement.getInnerHTML()); 
    } 
} 

O çalışıyor ancak bir sınırlama vardır: Sen widget'ınızda (dış veya iç) üzerinde doğrudan herhangi işleyicisi takmak CAN NOT

  • .

örn:

widget.addClickHandler(new ClickHandler() { 
    @Override 
    public void onClick(ClickEvent event) { 
     // Won't work!!! 
    } 
}); 

ya:

widget.getMyTextBox().addClickHandler(new ClickHandler() { 
    @Override 
    public void onClick(ClickEvent event) { 
     // Won't work!!! 
    } 
}); 
+1

Bu sınırlama için bir çözüm var mı? Gerçekten böyle bir funcitonalite uygulamak istiyorum. – nanospeck

+0

http: // stackoverflow'a bir göz atın.com/questions/4691801/nasıl-can-i-render-a-clickabletextcell-as-anchor-in-a-gwt-celltable 'thomas' cevabına bakın – user949110

+0

Tıklama olayının tetikleneceğinin farkında olun sütundaki ** herhangi bir şey tıklandığında. Sütunda iki düğmeniz varsa, hangisinin tıklandığı arasında ayrım yapamazsınız. Bu durumda bu cevaba bakın - http://stackoverflow.com/questions/9108317/gwt-celltable-need-to-have-two-buttons-in-last-single-cell-of-each-row. – Ben

İlgili konular