2011-01-29 23 views
18

Tôi đang sử dụng CellTable để hiển thị bản ghi của mình nhưng hiện tại, tôi muốn hiển thị hộp chọn khi người dùng nhấp vào một ô. Một điều nữa là hộp chọn là tiện ích của riêng tôi, không phải là một tiện ích được xác định trước. Bạn có thể gợi ý cho tôi bất kỳ phương pháp làm điều này?Làm cách nào để đặt tiện ích con vào ô CellTable?

+0

hãy [không sử dụng chữ ký hoặc tagline] (http://stackoverflow.com/faq#signatures) trong bài viết của mình. – meagar

+0

Tôi có cùng một vấn đề - tôi cần phải hiển thị một số vật dụng khá nặng (về mặt logic của họ) vào các ô trong bảng. Những gì tôi muốn từ CellTable là để có thể cung cấp một nhà máy IsWidget được sử dụng để tạo ra các widget để vẽ từng ô trong một cột. Tôi không thể nhìn thấy một cách dễ dàng để làm điều này nhưng tôi không muốn thực hiện các bảng từ đầu. – drdozer

Trả lời

23

Có một bài đăng trên nhóm google GWT thảo luận về the answer. Về cơ bản bạn tạo widget tùy chỉnh của bạn như bình thường, và bên trong hàm render bạn sử dụng widget.getElement(). GetInnterHTML().

@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

Thay vì sử dụng widget.getElement.getInnerHTML(), tôi đang sử dụng widget.getElement.getString(), vì nó bao gồm HTML bên ngoài. –

+1

có thể sử dụng lại cùng một tiện ích để hiển thị HTML cho từng ô không? (Tôi có lẽ nên chỉ viết một số mã để tìm hiểu .. nhưng chỉ hấp dẫn ..) – HaveAGuess

2

Một số thời gian trước đây tôi phải đối mặt với vấn đề tương tự (cố gắng chèn một widget tùy chỉnh vào ô CellList), nhưng tiếc là không tìm thấy một giải pháp dễ dàng.

Nói chung, bạn có thể triển khai lớp ô cụ thể, mở rộng AbstractCell hoặc ActionCell. Trong trường hợp này, bạn sẽ phải ghi đè phương thức render() và thực hiện hiển thị của riêng bạn. Ví dụ tốt được đưa ra trong AbstractCell class javadoc.

8

Đây là mẫu chống. Toàn bộ mục đích của các tế bào là để bạn không có vật dụng: bạn có nghĩa vụ phải "render" html trực tiếp trong tế bào.

+0

tại sao họ thêm hỗ trợ widget UIBinder cho celltables sau đó? (không chính xác trích dẫn nhưng từ chuỗi: http://groups.google.com/group/google-web-toolkit/browse_thread/thread/9cfb4a3b5c4af0be/b75305d15a1c32e8?lnk=gst&q=celltable+widget#b75305d15a1c32e8) – HaveAGuess

+0

có thể là, nhưng đôi khi không thể tránh khỏi – jabal

+0

Tôi không đồng ý, đôi khi bạn không muốn làm phiền với HTML và chỉ cần để tiện ích hiển thị kết xuất GWT cho bạn. – RockyMM

7

Có một bài đăng trên nhóm Google GWT thảo luận câu trả lời. Về cơ bản bạn tạo widget tùy chỉnh của bạn như bình thường, và bên trong hàm render bạn sử dụng widget.getElement(). GetInnterHTML().

@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()); 
    } 
} 

Nó hoạt động nhưng có một giới hạn:

  • Bạn KHÔNG THỂ đính kèm bất kỳ điều khiển trực tiếp trên widget của bạn (bên ngoài hoặc bên trong).

ví dụ:

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

hay:

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

Có cách giải quyết nào cho giới hạn này không? Tôi thực sự muốn thực hiện một funcitonality như vậy. – nanospeck

+0

có giao diện http: // stackoverflow.com/questions/4691801/how-can-i-render-a-clickabletextcell-as-an-anchor-in-a-gwt-celltable xem câu trả lời bằng 'thomas' – user949110

+0

Lưu ý rằng sự kiện nhấp chuột sẽ được kích hoạt bất cứ khi nào ** bất cứ điều gì ** trong cột được nhấp. Nếu bạn có hai nút trong cột, bạn sẽ không thể phân biệt giữa các nút nào được nhấp. Trong trường hợp này, hãy tham khảo câu trả lời này - http://stackoverflow.com/questions/9108317/gwt-celltable-need-to-have-two-buttons-in-last-single-cell-of-each-row. – Ben

Các vấn đề liên quan