使用GIN在UiBinder xml中创建资源



我们的应用程序使用GIN动态实例化其GWT资源包。这样做是为了能够在运行时为不同的显示模式加载不同的样式表。一般来说,这意味着我可以使用类似MyApp.ginjector.getResources()的东西来创建资源的单例实例,而不是标准的GWT.create(MyAppResources.class)

这适用于除UiBinder代码之外的所有代码。我们一直在使用<ui:with ref="res" type="com.company.MyAppResources" />,我希望使用GIN而不是GWT.create来创建MyAppResources的实例。

根据GWTUiBinder文档,有两种方法可以处理此问题。在组件中使用@UiField(provided=true)@UiFactory。这两种方法都是不可取的,因为它们要求我的团队中的人员(包括我自己)记住将这些样板代码放入每个小部件中。更糟糕的是,如果省略了创建代码,那么一切似乎都能正常工作,因为GWT.create将创建我们资源的一个实例,而不是我们想要的实例。

我正在寻找一种创建某种全局@UiFactory方法的方法,我的所有组件都将使用这种方法,它将委托给GIN。或者,挂接特定类的GWT.create并让客户端运行时代码创建实例的某种方式也可以,因为我可以将对象创建委托给我的静态Ginjector

如果您有一个带有静态字段ginjectorcom.company.MyApp,那么您可以使用:

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

然后(假设Java中的ginjector.getResources().style().foo()):

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

相关内容

  • 没有找到相关文章

最新更新