css – 何时使用GWT ensureInjected()?

前端之家收集整理的这篇文章主要介绍了css – 何时使用GWT ensureInjected()?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在CSSResource中创建了一些样式,无论我使用什么样,它都可以很好的工作
  1. GWT.<MyResources>create(MyResources.class).myStyles().ensureInjected();

或不。

任何人都可以清楚这一点,并解释什么时候使用ensure?

谢谢!
丹尼尔

解决方法

正如Christian所说,在UiBinder ui.xml文件中,您不必担心调用ensureInjected(),以下XML语句执行此操作:
  1. <ui:with field='myStyle' type='com...MyStyle'/>
  1. <div class='{myStyle.redBorder}'/>

当然这是假设有一个MyStyle接口定义的地方:

  1. public interface MyStyle {
  2. public String redBorder();
  3. }

现在我同意你的看法,当你需要在UiBinder模板之外处理CssResource扩展时,会让人烦恼。正是因为在使用MyStyle实例和小部件之前,必须注意调用ensureInjected()。

我个人使用GIN来注入CssResource扩展的实例,只要我需要它们。这样可以实现一个自定义的GIN提供程序,确保在注入之前在CssResource上调用ensureInjected()。
这里涉及三个步骤:

>为MyStyle创建一个与CSS文件一起的界面。
MyStyle.java

  1. public interface MyStyle {
  2. public String redBorder();
  3. }

> MyStyle.css

  1. .redBorder { border: 1px solid red; }

>通过ClientBundle扩展来显示它。
Resources.java

  1. public interface Resources extends ClientBundle {
  2. @Source("MyStyle.css")
  3. public MyStyle style();
  4. }

>配置一个GIN提供程序方法来注入MyStyle的实例。
ClientModule.java

  1. public class ClientModule extends AbstractGinModule {
  2. @Override
  3. protected void configure() {
  4. //...
  5. }
  6.  
  7. @Provides MyStyle createStyle(final Resources resources) {
  8. MyStyle style = resources.style();
  9. style.ensureInjected();
  10. return style;
  11. }
  12. }

我们顺利地将资源实例注入上面,这意味着在任何地方,无论是调用GWT的静态访问器(资源> create(Resources.class)),都只会发生在GIN注入中。

完成之后,您可以在需要时注入MyStyle的实例。
例如(在某些MVP上下文中):

  1. private Widget widget;
  2.  
  3. @Inject
  4. public SomeView(final MyStyle style) {
  5. //...
  6. widget = uiBinder.createAndBindUi(this);
  7. widget.addStyleName(style.redBorder());
  8. }

猜你在找的CSS相关文章