2013-03-18 2 views
3

У меня есть вопрос, связанный с UiBinder.GWT: Как использовать константы в шаблоне UiBinder

У меня есть следующий UiBinder файл:

<!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"> 
    <g:HTMLPanel> 
     <div> 
      <g:VerticalPanel> 
       <g:Label>Please enter your password:</g:Label> 
       <g:FlowPanel> 
        <g:PasswordTextBox ui:field="textbox"/> 
        <g:Button ui:field="button" text="Login" styleName="?????"/> 
       </g:FlowPanel> 
      </g:VerticalPanel> 
     </div> 
    </g:HTMLPanel> 
</ui:UiBinder> 

Если я кладу имя стиля в ???, он прекрасно работает.

Однако у нас есть постоянный файл (не константы i18n), который содержит все имена css в качестве констант. Например:

public class CSSConstants { 
    public static final String CSS_TITLE = "title"; 

    public static final String CSS_TEXT_NORMAL = "text_normal"; 
    public static final String CSS_TEXT_ERROR = "text_error"; 
    public static final String CSS_TEXT_ERROR = "button blue"; 
    ....... 
} 

Я хочу знать, как я могу ссылаться на этот постоянный файл в шаблоне UiBinder?

Большое спасибо

ответ

5

Я надеюсь, что это будет работать для вас: 1) В классе Java, определить статический поглотитель для вашего стиля имени-:

public static String getSomeStyle(){} 

2) Доступ вашего имени стиля, как следующее:

<ui:with type="package.of.your.class.ClassName" field="yourClass"></ui:with> 

<g:Button ui:field="button" text="Login" styleName="{yourClass.getSomeStyle}"/> 

Это прекрасно работает при доступе значения targetHistoryToken, и я надеюсь, что он будет работать в вашем случае.

Конечно, вы можете сделать это легко (и элегантно) с помощью интерфейсов, которые расширяют ClientBundle, но я не думаю, что это то, что вы хотите (исправьте меня, если я неправильно понял вашу потребность, поэтому я могу дать больше советов).

(К сожалению у меня нет среду разработки, чтобы проверить его, прежде чем отправлять свой ответ)

+1

StyleName = "yourClass.getSomeStyle" должно быть с {} - StyleName = "{yourClass.getSomeStyle}". – FFire

+0

да, конечно, извините. Ответ отредактирован –

+0

Большое спасибо за ваш ответ. Я думаю, что это сработает, но теперь я думаю, что лучше поместить жестко закодированное имя стиля в файл шаблона UiBinder, так как IntelliJ поддерживает автоматическое завершение, если я поместил имя стиля напрямую, но не сделаю этого, если буду использовать постоянный файл :). Я уверен, что это будет полезно в других сценариях в будущем. – 2013-03-19 06:59:20