在我的场景中(欢迎修改)我有一个带有导航和内容面板的主页面:
main
|
+--- Navigation (sets contents in ContentPage)
|
\--- ContentPage
现在,Navigation
需要对ContentPage
的引用,因此它实际上可以更改内容。这意味着在构建main
时,需要将ContentPage
传递给Navigation
。这是我目前正在使用的代码:
public class Main extends Composite {
@UiField
Panel contentPanel;
@UiFactory
Navigation makeNavigation() {
return new Navigation(contentPanel);
}
interface MyUiBinder extends UiBinder<Widget, Middle> {
}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
public Main() {
initWidget(uiBinder.createAndBindUi(this));
}
}
问题在于,在调用makeNavigation时,UiField contentPanel
尚未设置(它为空)。我想这是合理的,因为我没有保证initWidget
被调用。
所以,我接近这个错误吗?有没有办法选择创建订单?
答案 0 :(得分:1)
显然,窗口小部件实例化顺序是ui.xml文件中的显示顺序,因此如果您希望在导航之前对contentPanel进行实例化,则必须将其放在xml之前。
我同意,这不是解决方案......
答案 1 :(得分:0)
到目前为止,我已经使用以下方法开展工作:
public class Middle extends Composite {
@UiField
Panel contentPanel;
@UiField
Navigation navigation;
interface MyUiBinder extends UiBinder<Widget, Middle> {
}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
public Middle() {
initWidget(uiBinder.createAndBindUi(this));
navigation.setContentPanel(contentPanel);
}
}
这可以保证contentPanel
存在,但有点将Navitagion
页面的构建阶段分为两步。这是“社区认可的”方法吗?