我在这里需要一个递归的 FXML 加载案例。
如果我选择查看一个目标,它会将我带到另一个加载策略对象列表的屏幕实例。如果我选择查看策略,它会将我带到另一个加载战术对象列表的屏幕实例。如果我查看 Tactic,它会将我带到另一个加载 Task 对象列表的屏幕实例。
自然地,我决定使用基控制器类 ViewChildItemController 来处理继承。然后我从它扩展了 ViewObjective、ViewStrategy 和 ViewTactic。(ViewTask 没有意义,因为 Task 是没有子项的最低级别的项目)。
问题是,当我使用 loader.loadController() 时,该方法返回 null。
FXMLLoader loader = new FXMLLoader(this.getClass()
.getResource(ScreenPaths.VIEW_PLAN_ITEM));
Parent root = null;
try {
root = loader.load();
} catch (IOException e) {
}
ViewObjectiveController ctrl = loader.getController();//Return null? Why?
ObservableList<Strategy> childItems = childItemsTableView.
getSelectionModel().getSelectedItem().getChildPlanItems();
ctrl.initValues(childItems);
DialogPopup.showNode(root);
会不会是正在加载的基本 FXML 挂接到 ViewChildItemController?我是否必须创建 FXML 的多个副本并将控制器分别连接到每个 ViewObjectiveController、ViewStrategyController 等?这样做没有多大意义。
我可以尝试 loader.setController(),但我不确定是否会再次映射 @FXML 属性。