В нашем приложении используется 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
.
О, это умно, я гавань» t используется ui: import before. Для чистоты вы можете создать класс с явной целью предоставления стилей и других статических ресурсов файлам UiBinder. –
Другим решением, о котором я думал, является создание общего базового класса для наших виджетов (например, MyAppComposite), который может предоставлять методы UiFactory для ресурсов или потенциально виджетов, если их нужно создавать специально. –
Номер был заменен на ? Я использую GWT 2.5.1, и я получил его для работы с –