css – 何时使用GWT ensureInjected()?

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

或不。

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

谢谢!
丹尼尔

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

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

public interface MyStyle {
    public String redBorder();
}

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

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

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

public interface MyStyle {
    public String redBorder();
}

> MyStyle.css

.redBorder { border: 1px solid red; }

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

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

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

public class ClientModule extends AbstractGinModule {
    @Override
    protected void configure() {
    //...
    }

    @Provides MyStyle createStyle(final Resources resources) {
        MyStyle style = resources.style();
        style.ensureInjected();
        return style;
    }
}

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

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

private Widget widget;

@Inject
public SomeView(final MyStyle style) {
    //...
    widget = uiBinder.createAndBindUi(this);
    widget.addStyleName(style.redBorder());
}

原文链接:https://www.f2er.com/css/218426.html

猜你在找的CSS相关文章