4. 视图间的交互
用户应该能通过点击地图中的标记修改并保存工作位置。但是我们的应用程序目前还没有这个功能。
打开 LocationLookupView
视图控制器,提供用于读写位置信息的 getter 和 setter。
public Location getSelected() {
return selected;
}
public void setSelected(@Nullable Location selected) {
this.selected = selected;
currentLocationField.setValue(selected);
if (selected != null) {
setMapCenter(selected.getBuilding());
}
}
打开 UserDetailView
视图控制器,找到 onLocationFieldSelect()
处理方法。我们的需求不仅仅是打开对话框,而是能在打开对话框的同时传入之前保存的位置信息。此外,我们还需要在对话框关闭时获取地点选择的结果。下面是按这个需求修改的内容:
@ViewComponent
private JmixValuePicker<Location> locationField;
@Subscribe("locationField.select")
public void onLocationFieldSelect(final ActionPerformedEvent event) {
dialogWindows.view(this, LocationLookupView.class)
.withAfterCloseListener(closeEvent -> {
if (closeEvent.closedWith(StandardOutcome.SELECT)) {
locationField.setValue(closeEvent.getView().getSelected()); (1)
}
})
.open()
.getView()
.setSelected(getEditedEntity().getLocation()); (2)
}
1 | AfterCloseEvent 对象包含 CloseAction 视图中 close() 传入的参数。我们用 event 对象的 closedWith() 方法分析视图的关闭操作。提醒:在前一章中,我们为 select 操作创建了 处理方法。 |
2 | 将被编辑用户的位置信息传递给 LocationLookupView 的 setter。 |
启动应用程序,检查 UserDetailView
和 LocationLookupView
之间能正常交互。
本页是否有帮助?
感谢您的反馈