Я пытаюсь получить доступ к некоторым объектам внутри компонента ui: binder, но не уверен, как получить доступ к eventBus, requestFactory и т. Д. Без написания неприятного кода, который не даст мне спать по ночам (также обратите внимание, что ясовершенно новый для JAVA, фон в Perl / Python / PHP).
Мой файл ui.xml:
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:ig='urn:import:com.ig.client.scaffold.ui.widget'>
<ui:style>
...
</ui:style>
<g:HorizontalPanel>
...
</g:HorizontalPanel>
</ui:UiBinder>
Инжектирование EventBus таким способом завершается неудачно с com.ig.client.scaffold.ui.widget.R не имеет конструктора по умолчанию (ноль аргументов).
public class R extends Composite {
interface MyUiBinder extends UiBinder<Widget, R> {}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
private final EventBus eventBus;
@UiField SimplePanel fieldA, ...;
@Inject
public R(EventBus eventBus){
this.eventBus = eventBus;
initWidget(uiBinder.createAndBindUi(this));
}
}
Итак, согласно сообщению об ошибке, я создаю UIFactory, а затем получаю ошибку ... '{style.entityComponent} '> отсутствует обязательный атрибут (ы): элемент EventBus ... (похоже, что он пытается найти eventBus в таблице стилей ui: binder.
public class R extends Composite {
interface MyUiBinder extends UiBinder<Widget, R> {}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
private final EventBus eventBus;
@UiField SimplePanel fieldA, ...;
public @UiConstructor R(EventBus eventBus){
this.eventBus = eventBus;
initWidget(uiBinder.createAndBindUi(this));
}
@Inject
@UiFactory R makeR(){
return new R(eventBus);
}
}
Из чтения и чтения и более чтения дляВ последние пару дней я не видел, чтобы кто-то обращался к eventBus, requestFactory и historyController напрямую в привязке представления к виджету ui: binder, что привело к выводу, что это, вероятно, не лучший способ в любом случае.
Скажем, у меня есть oject, назовем его Proxy, прокси содержит handleButtonClick, который затем вызывает eventBus.doSomething ().Как связать этот объект Proxy с виджетом ui: binder, не создавая его экземпляры или не передавая его каждому виджету?
Можно ли выполнить внедрение GIN в интерфейс, а затем реализовать этот интерфейсчерез класс R, который затем каким-то образом будет содержать объекты, которые я ищу?
Любое решение, которое работает, приветствуется, просто ищет образец (который может понять Java n00b), который в основном позволит мне подключить мойинтерфейс с остальными сервисами, созданными ROO.
Спасибо J