【发布时间】:2013-08-17 12:14:01
【问题描述】:
我想在 GWT 应用程序中移除注入的 CSSResource。
我使用了以下代码MyClass.INSTANCE.ensureInjected();
我只想要特定页面的上述 CSSResource。所以剩下的页面应该按照实际的 css/theme 工作。
一旦我注入它,它就适用于整个应用程序。我该如何克服这个问题?
【问题讨论】:
标签: gwt uibinder gwt2 clientbundle cssresource
我想在 GWT 应用程序中移除注入的 CSSResource。
我使用了以下代码MyClass.INSTANCE.ensureInjected();
我只想要特定页面的上述 CSSResource。所以剩下的页面应该按照实际的 css/theme 工作。
一旦我注入它,它就适用于整个应用程序。我该如何克服这个问题?
【问题讨论】:
标签: gwt uibinder gwt2 clientbundle cssresource
您可以直接使用 StyleInjector 实用程序类而不是 ensureInjected() 方法注入您的 css 包
然后您将获得注入元素的引用,您可以在需要时将其删除。
// Equivalent to MyClass.INSTANCE.ensureInjected()
StyleElement e = StyleInjector.injectStylesheet(MyClass.INSTANCE.css().getText());
// Remove the injected css element
e.removeFromParent();
【讨论】:
理论上您可以尝试从 DOM 中移除注入的样式块,但这会非常困难(而且可能不太可靠)。
以不同的方式组织你的“特殊” CSS 样式表会更好:
像这样转动选择器
.some {
color: green;
}
.other {
color: red;
}
进入
.special .some {
color: green;
}
.special .other {
color: red;
}
然后添加/删除“特殊”类,例如到/从您的 body 元素激活/停用特殊样式。
【讨论】:
如果您在多个页面中嵌入了相同的 GWT 应用程序,并且您希望基于给定页面的不同行为,例如,您可以调用
MyClass.INSTANCE.ensureInjected();
如果设置了引导参数。
在主机页面中,设置参数,例如 YourGwtApp.nocahe.js?css=inject 并按照说明阅读它here
在 onLoadMethod 中,根据您的引导参数调用ensureInjected。
【讨论】: