2013-04-15 109 views
2

IM和我的HTML包含像GWT UiBinder的自動更正過使用GWT UiBinder的方法

<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" 
    xmlns:g="urn:import:com.google.gwt.user.client.ui" 
    xmlns:idmw="urn:import:com.testing.wid.impl"> 
    <g:HTMLPanel> 
    <table align="center" valign="center" height="25%"> 
     <tr><td><g:TextBox ui:field='searchS' /></td></tr> 

    </table> 
    </g:HTMLPanel> 

一個文本框,我怎麼能TURN OFF自動更正和autocapitalize這個文本框? 我試圖

<g:TextBox ui:field='searchS' autocapitalize="off" autocorrect="off"/> 

,但我得到

[ERROR] Class TextBox has no appropriate setAutocorrect() 
method Element <g:TextBox autocapitalize='off' autocorrect='off' ui:field='searchS'> 

任何其他方式,我可以做到這一點???

感謝

回答

3

正如已經@Boris Brudnoy指出,沒有內置的方式與文本框來做到這一點。羚牛futher他建議,這將是很好的解壓到這個新的自定義組件(簡化重用和支持):

  1. 添加新的軟件包(例如com.app.shared.customcontrol
  2. 添加新CustomTextBox:

    public class CustomTextBox extends TextBox { 
    
        public void setAutocomplete(String value){ 
         this.getElement().setAttribute("autocomplete", value); 
        } 
    
        public void setAutocapitalize(String value){ 
         this.getElement().setAttribute("autocapitalize", value); 
        } 
    } 
    
  3. 使用UI粘合劑聲明新的命名空間,並使用您的組件:

    <!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" 
        xmlns:c="urn:import:com.app.shared.customcontrol"> 
    
        <g:HTMLPanel ...> 
         <c:CustomTextBox ui:field="..." autocomplete="off" autocapitalize="off" /> 
        </g:HTMLPanel> 
    </ui:UiBinder> 
    

作爲替代方式,如果你想廣泛應用這些設置系統,您可以通過構造做到這一點:

public class CustomTextBox extends TextBox { 

    public CustomTextBox() { 
     this.getElement().setAttribute("autocomplete", "off"); 
     this.getElement().setAttribute("autocapitalize", "off"); 
    } 

    .... 
} 
+0

+1功能封裝。如果一個人習慣於編寫自定義小部件,這當然是更好的設計。 –

1

你試過什麼,因爲GWT將無法工作不直接轉換UiBinder的屬性爲HTML元素屬性。相反,當您的錯誤消息提示時,它會查找形式爲set[UiBinder_attribute]的窗口小部件設置器方法。由於the TextBox class中既沒有setAutocorrect也沒有setAutocapitalize方法,因此預計會收到錯誤。

你可以做的是下降到元素級並寫下類似的內容,例如在你的widget的構造函數:

public MyWidget() { 
     initWidget(uiBinder.createAndBindUi(this)); 
     searchS.getElement().setProperty("autocapitalize", "off"); 
     searchS.getElement().setProperty("autocorrect", "off"); 
    } 
+0

+1元級操作 –