GWTP: невозможно реализовать два представления для одного и того же докладчика с использованием отложенного связывания с форм-фактором - PullRequest
0 голосов
/ 16 декабря 2018

Я не могу реализовать два представления для одного и того же докладчика, хотя выполняется только одна перестановка.Я использую GWTP, у меня есть gin ClientModule, который устанавливает LoginModule (здесь я связываю LoginPresenter с LoginView), я хочу другое представление для LoginPresenter на основе значения formfactor в URL.Поэтому для этого у меня есть другой модуль джина NewClientModule, который устанавливает NewLoginModule (здесь я связываю LoginPresenter с NewLoginView).Поэтому я хочу заменить ClientModule на NewClientModule, используя отложенное связывание, но оно не работает.

Это файл FormFactor.gwt.xml:

<?xml version="1.0" encoding="UTF-8"?>

<!-- Defines the formfactor property and its provider function. -->
<module>

<!-- Determine view1 or view2. -->
<define-property name="formfactor" values="view1,view2"/>

<property-provider name="formfactor">
<![CDATA[
// Look for the formfactor as a url argument.
var args = location.search;
var start = args.indexOf("formfactor");
if (start >= 0) {
var value = args.substring(start);
var begin = value.indexOf("=") + 1;
var end = value.indexOf("&");
if (end == -1) {
end = value.length;
}
return value.substring(begin, end);
}
  // Everything else is a view1.
  return "view1";
]]>
</property-provider>

</module>

Я добавил эти строки в свое основное приложение.gwt.xml file

<inherits name="com.gwtplatform.mvp.MvpWithFormFactor"/>
<inherits name='com.sample.application.FormFactor'/>

<set-configuration-property name="gin.ginjector.module.view2"
 value="com.sample.application.client.gin.NewClientModule"/>

<set-configuration-property name="gin.ginjector.modules"
value="com.sample.application.client.gin.ClientModule" />

<replace-with class="com.sample.application.client.gin.NewClientModule">
<when-type-is class="com.sample.application.client.gin.ClientModule"/>
<when-property-is name="formfactor" value="view2"/>
</replace-with>

Мой ClientModule устанавливает

(new LoginModule()); 

и NewClientModule устанавливает

(new NewLoginModule());

Мой LoginModule связывает LoginPresenter с LoginView:

bindPresenter(LoginPresenter.class, LoginPresenter.MyView.class, LoginView.class,LoginPresenter.MyProxy.class);

Мой NewLoginModule связывает LoginPresenter с NewLoginView

bindPresenter(LoginPresenter.class, LoginPresenter.MyView.class, NewLoginView.class,LoginPresenter.MyProxy.class);
...