我試圖創建一個複合窗口小部件,它將顯示子窗口小部件的「列表」,但我在使用此設置時會遇到一些問題。已經構建了一個簡單的演示,試圖找出解決方案。試圖用代碼如何跨GWT窗口小部件共享樣式表類型
public class CssParent extends Composite{
interface MyUiBinder extends UiBinder<Widget, CssParent> {}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
@UiField FlowPanel childPanel;
public CssParent() {
initWidget(uiBinder.createAndBindUi(this));
CssChild child = new CssChild();
childPanel.add(child);
}
}
子構件被簡單地指定爲
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<ui:with field='res' type='egov.widgets.discussion.client.poc.Resources' />
<g:HTMLPanel stylePrimaryName='{res.style.childStyle}'>
Howdy folks
</g:HTMLPanel>
</ui:UiBinder>
現在指定這樣
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<ui:with field='res' type='egov.widgets.discussion.client.poc.Resources' />
<g:FlowPanel ui:field="childPanel" stylePrimaryName='{res.style.parentStyle}'>
</g:FlowPanel>
</ui:UiBinder>
父窗口部件,你可以看到,他們同時通過資源捆綁:
public interface Resources extends ClientBundle {
@Source("CssDemo.css")
Style style();
public interface Style extends CssResource{
String parentStyle();
String childStyle();
}
}
,它再次引用CssDemo.css: .parentStyle { background-color:gray; }
.parentStyle .childStyle{
background-color: yellow;
}
但由於某些原因這些CSS規則從不施加到上述兩個div元素。任何想法爲什麼這會失敗?或者當樣式包含不同css類之間的依賴關係規則時,在小部件之間共享.css樣式表的更好方式?
感謝@external提示。調試所有這些混淆名稱的過程中真的遇到了麻煩。 已在此處發佈我的解決方案。你知道是否有一個更優雅的方式,我想要存檔? – Jannick 2010-02-20 18:00:58
啊,是的,我忘記了你在答案中描述的ensureInjected。這是讓共享樣式表正常工作的正確方法;如果你不這樣做,我認爲症狀是應用了CSS類,但沒有規則與它們相關聯。 Igor Kilmer的下面的評論是正確的 - 只有在跨越多個UiBinder小部件的風格時才使用共享樣式表。例如,我使用它們在相關但不同的UI元素中獲得了相似的外觀。 – aem 2010-02-21 19:22:48