2012-10-12 2 views
1

В нашем приложении используется GIN для динамического создания пакета GWT Resource. Это делается для загрузки различных таблиц стилей во время выполнения для разных режимов отображения. В общем, это означает, что я могу создать одноэлементный экземпляр ресурсов, используя что-то вроде MyApp.ginjector.getResources(), в отличие от стандарта GWT.create(MyAppResources.class).Использование ресурса, созданного GIN в UiBinder xml

Это хорошо работает для всего, кроме кода UiBinder. Мы использовали <ui:with ref="res" type="com.company.MyAppResources" />, и я хотел бы, чтобы экземпляр MyAppResources был создан с помощью GIN, а не GWT.create.

Согласно GWT UiBinder docs, есть два способа справиться с этим. Либо используйте в компоненте @UiField(provided=true) или @UiFactory. Оба этих метода нежелательны, потому что они требуют, чтобы люди в моей команде (включая меня) не задумывались о том, чтобы включить этот код шаблона в каждый виджет. Хуже того, если код создания пропущен, все будет работать, так как GWT.create создаст экземпляр наших ресурсов, а не тот, который мы хотим.

Я ищу способ создания своего рода глобального метода @UiFactory, который будут использовать все мои компоненты, которые будут делегировать GIN. Альтернативно, какой-то способ подключения к GWT.create для определенных классов и создания кода экземпляра на стороне клиента создать экземпляр также будет работать, поскольку я мог бы затем делегировать создание объекта моему статическому Ginjector.

ответ

3

Если у вас есть com.company.MyApp со статическим полем ginjector, то вы можете использовать:

<ui:import field="com.company.MyApp.ginjector" /> 

, а затем (при условии, ginjector.getResources().style().foo() в Java):

<span class="{ginjector.getResources.style.foo}"> 
+0

О, это умно, я гавань» t используется ui: import before. Для чистоты вы можете создать класс с явной целью предоставления стилей и других статических ресурсов файлам UiBinder. –

+0

Другим решением, о котором я думал, является создание общего базового класса для наших виджетов (например, MyAppComposite), который может предоставлять методы UiFactory для ресурсов или потенциально виджетов, если их нужно создавать специально. –

+0

Номер был заменен на ? Я использую GWT 2.5.1, и я получил его для работы с

Смежные вопросы