Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GWT共享CSS样式不';行不通_Css_Gwt_Uibinder_Gwt2 - Fatal编程技术网

GWT共享CSS样式不';行不通

GWT共享CSS样式不';行不通,css,gwt,uibinder,gwt2,Css,Gwt,Uibinder,Gwt2,我需要在一些UI活页夹模板中使用相同的样式,所以我按照中所述完成了所有操作: 因此,我做了以下工作: 一,。创建的资源接口: public interface Resources extends ClientBundle { @Source("shared.css") Style style(); public interface Style extends CssResource { String grayedOut(); } } 三,。将带有

我需要在一些UI活页夹模板中使用相同的样式,所以我按照中所述完成了所有操作:

因此,我做了以下工作:

一,。创建的资源接口:

public interface Resources extends ClientBundle { @Source("shared.css") Style style(); public interface Style extends CssResource { String grayedOut(); } } 三,。将带有元素的
添加到UI活页夹模板中:

四,。添加了对UI活页夹模板中样式的引用:
addStyleNames=“{res.style.grayedOut}”

但是它不起作用。该视图的渲染方式与完全未应用灰色输出样式一样

但我观察到两件事:

  • 在Firebug/Chrome开发工具中,我可以看到元素分配了一个与我试图添加的样式相对应的分散样式名:
    class=“GAWERH0MI gwt TabLayoutPanelContent”
    GAWERH0MI
    似乎与我的
    grayedOut
    类相对应),但我在“元素样式”中找不到它面板,这可能意味着这个类是空的(没有主体)。(我做了实验,并将空类分配给元素,效果与工具中的相同)
  • 当我在.css中更改样式名称时,我得到了一个运行时错误,即无法找到style
    grayedOut
    ,这似乎意味着我的样式类通常可以成功找到,但由于某些原因无法按预期工作

  • 您可能忘记在
    Resources.Style
    实例上调用
    ensureInjected()

    这是为
    自动完成的(因为您没有对
    ClientBundle
    CssResource
    接口进行编码,它们是由UiBinder为您生成的),但不适用于任何其他
    CssResource

    但是,您可以使用
    @UiField Resources res
    ,它将被注入
    的值,因此在调用
    createAndBindUi
    之后调用
    res.style().ensureInjected()
    在我看来,您最好将
    资源
    实例注入视图,并使用
    @UiField(provided=true)
    ,从而确保在实例注入视图之前调用
    ensureInjected()
    ,或者选择在每个视图中调用
    ensureInjected()
    。如在ui小部件java文件中所示:

    @UiField
    Resources res;
    public YourWidget() {
            initWidget(uiBinder.createAndBindUi(this));     
            res.style().ensureInjected();
        }
    
    ui小部件xml文件:

    <ui:with field='res' type="your path to Resource class" />
    
    
    

    
    
    谢谢你,托马斯。但是要调用Resources.style(),我需要一个
    Resources
    的实例,它是由UIBinder内部声明的(
    您可以通过元素将资源提供给您的模板,但代价是为您实例化它们。
    )。那么,我应该何时/如何调用此方法?同样遗憾的是,在我链接的文档中,似乎有一些内容是完整的、有效的示例,但没有提到调用
    ensureInjected()
    ,这是该代码正常工作所必需的:(.从不起作用的文档复制示例很容易浪费大量时间。调用
    ensureInjected
    是一件痛苦的事。幸运的是,在CssResource的第二个实例上调用
    ensureInjected
    ,对所有相同类型的CssResource都有效。我已经学习了快速的
    静态{GWT.create();css.ensureInjected();}
    在每个UiBinder的Java文件顶部。@Thomas Broyer:这样会很方便(而且不会更贵?)要在
    ed ClientBundles的所有CssResource子级上自动调用ensureInjected。@PiotrSobczyk:它记录在@RileyLark:中,您还可以使用
    @UiField Resources res
    注入
    的值,从而调用
    res.style().ensureInjected()
    在调用
    createAndBindUi
    之后。自动调用
    ensureInjected()
    意味着将特定于
    CssResource
    的行为添加到
    和/或
    {expansions}
    中,这是完全通用的(更不用说你
    GWT.创建
    ClientBundle
    ,而不是
    CssResource
    ,并且你可以在UiBinder模板中使用
    ClientBundle
    中定义的
    CssResource
    中的任何/任何/所有
    s。因此,不,这不会发生。托马斯,请你更新你的答案,以包含以下语句:“您可以使用@UiField Resources res,它将被注入的值,并因此在调用createAndBindUi之后调用res.style().ensureInjected()。”因为这部分对我解决问题来说是最重要的。当您这样做时,我会将您的答案标记为已接受。我认为它比静态初始值设定项优雅得多:).无论如何,谢谢你的意见Riley!
    
    <ui:with field='res' type="your path to Resource class" />
    
    <g:Label addStyleNames="{res.style.grayedOut}" ui:field="icon"></g:Label>