2010-10-15 37 views
15

Tôi đang sử dụng GWT và UiBinder cho ứng dụng của tôi, và tôi đang cố gắng để làm điều nàyThuộc tính tùy chỉnh trong UiBinder widget

<g:TextBox ui:field="searchBox" styleName="{style.searchBox}" placeholder="search" />

Nhưng tùy chỉnh placeholder thuộc tính sẽ không hoạt động vì không có một phương pháp setPlaceholder trên TextBox - tôi cần phải này:

searchBox.getElement().setAttribute("placeholder", "search");

trở lại trong mã java. Bất kỳ ý tưởng về cách làm điều này trong UiBinder chính nó? Tôi cho rằng tôi có thể thay đổi nó thành một yếu tố đầu vào bình thường và cố gắng lấy một tham chiếu và giá trị của nó, nhưng tôi không muốn đi xuống con đường đó.

+0

Không thể thực hiện điều này (như bạn đã nói, bạn cần phương thức setter cho nó). Tại sao không thiết lập thuộc tính trong hàm tạo của lớp khung nhìn tương ứng ngay sau khi gọi 'initWidget (uiBinder.createAndBindUi (this))'? Chỉnh sửa: hoặc viết chức năng giữ chỗ của riêng bạn cũng sẽ hoạt động trên các trình duyệt cũ hơn. – z00bs

+0

Sau 'initWidget' là nơi tôi đang gọi' setAttribute' ngay bây giờ ... Tôi không muốn di chuyển bản trình bày ra khỏi tệp XML ... –

Trả lời

14

Điều gì về việc tạo tùy chỉnh SearchBox kéo dài TextBox bằng phương pháp setPlaceholder(String placeholder)?

Sau đó, trong UiBinder:

<custom:SearchBox ui:field="searchBox" styleName="{style.searchBox}" placeholder="search" />

+2

Đó có lẽ là những gì tôi sẽ làm trong trường hợp này, nhưng Tôi thấy ngày càng khó sử dụng các tính năng HTML 5 được dựa trên thuộc tính: ( –

8

Khoảng một năm sau này được hỏi, tôi đã có một nhu cầu sử dụng tùy chỉnh các thuộc tính (giữ chỗ, cụ thể). Vì vậy, tôi đã viết lớp tùy chỉnh sau TextField mở rộng TextBox, để nguyên vẹn tất cả chức năng cơ bản của một GWT TextBox bao gồm cả trình xử lý và như vậy. Hy vọng ai đó tình cờ khi điều này trong tìm kiếm của họ. :)

public class TextField extends TextBox { 

    String placeholder = ""; 

    /** 
    * Creates an empty text box. 
    */ 
    public TextField() {} 

    /** 
    * Gets the current placeholder text for the text box. 
    * 
    * @return the current placeholder text 
    */ 
    public String getPlaceholder() { 
     return placeholder; 
    } 

    /** 
    * Sets the placeholder text displayed in the text box. 
    * 
    * @param placeholder the placeholder text 
    */ 
    public void setPlaceholder(String text) { 
     placeholder = (text != null ? text : ""); 
     getElement().setPropertyString("placeholder", placeholder); 
    } 
} 
+3

Bạn cũng không cần lưu trữ trình giữ chỗ dưới dạng biến java. Bạn chỉ có thể sử dụng giá trị DOM trực tiếp. – logan

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