2013-02-07 37 views
1

未显示在我的子模块background-image属性我想在运行时注入的CSS:GWT:在注入外部CSS文件

public interface Resources extends ClientBundle 
{ 
    Resources INSTANCE = GWT.create(Resources.class); 

    @Source("pagedown.css") 
    @NotStrict 
    CssResource css(); 
} 

从Java我使用Resources.INSTANCE.css().ensureInjected();和它工作得很好,除了图像不显示,在pagedown.css中:

.wmd-button>span { 
    background-image: url(pagedown/wmd-buttons.png); 
    background-repeat: no-repeat; 
    background-position: 0px 0px; 
} 

原因是因为没有办法找到图像。上面的代码是在我的子项目(子模块)重用,我必须将图像复制到我的应用程序项目,以使其工作,它是相当繁琐和破解封装,有没有办法解决这个问题?

EDIT


如果我改性上述CSS来background-image: url(myapp/pagedown/wmd-buttons.png);它只会工作,但是,因为这个CSS是在子项目中,永远不知道我的应用程序项目的名称,所以如果我硬编码这样,有一天我有另一个项目使用这个组件,我必须修改它myOtherApp/pagedown/wmd-buttons.png,您可以看到两个项目发生冲突,并且无法同时使用我的组件。 谢谢。

+0

我不知道在运行时注入样式的这种方法,但在GWT中,我通过直接从java类本身为组件设置style属性来完成此操作。 Widget.getElement()。getStyle()。setProperty(“camel-case格式的样式属性”,“样式值”); 在你的情况下不可用吗? – Dipak

+0

如果你想要详细的示例代码,请让我知道。 – Dipak

+0

在制作你的战争文件时,请确保你的子项目中的所有图像都在war/images目录下...... –

回答

0

我想出了一个解决办法:让组件在构造函数接受一个参数,该参数是项目的基础url,它用于获取corrent图像url,在构造函数中,我使用GWTQuery附加正确的图像背景url。

0

语法这种风格属性附加伤害是:background-image: url("pagedown/wmd-buttons.png"); 所以代码变得

wmd-button>span { 
    background-image: url("pagedown/wmd-buttons.png"); 
    background-repeat: no-repeat; 
    background-position: 0px 0px; 
} 

不是这个:

.wmd-button>span { 
    background-image: url(pagedown/wmd-buttons.png); 
    background-repeat: no-repeat; 
    background-position: 0px 0px; 
} 
+0

确保'pagedown'文件夹位于项目的war文件夹中。 – Dipak

+0

感谢您的输入,但问题不是'url(pagedown/wmd-buttons.png)',我关心的是,如何在子模块中使用图像,使其可重用,请查看我的问题以获取详细信息。 – Mike

+0

使用数据库来存储图像并根据需要检索它。这不可能吗? 这意味着始终从url中检索图像,这反过来又是查询到图像数据库的结果,该图像数据库在不同项目之间共享。 :) – Dipak