1

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

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

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

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

4

1 回答 1

3

如果你有com.company.MyApp一个静态字段ginjector,那么你可以使用:

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

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

<span class="{ginjector.getResources.style.foo}">
于 2012-10-12T23:23:23.020 回答