使用例 使用一些参数在viewModel中的click事件上打开一个弹出窗口,以便可以在弹出窗口中加载相关数据。现在从弹出窗口中获取选定的数据模型,并将这些参数返回到父视图模式。
问题
简而言之,当我关闭窗口时,我希望在我的父视图模型中选择/ data或ListModel,而不是使用以下代码行再次创建它,因为它不符合我的用例,我必须关闭模型弹出窗口后保持布局
Executions.createComponents(MODEL_WINDOW_PAGE, null, map);
答案 0 :(得分:1)
在这里你可以看到我们如何做到这一点的例子..让我们假设
public void createReorderModal(Component comp) {
Map args = new HashMap();
List list = new ArrayList();
list.add("test");
args.put("availableList", list );
Executions.getCurrent().createComponents("/core/component/model_window.zul",comp, args);
}
现在在 model_window.zul 中有一个自己的ViewModel,现在在这个viewmodel的afterCompose方法中编写下面的代码,以获取在上一步中传递的参数。
@AfterCompose
public void doAfterCompose(@ContextParam(ContextType.VIEW) Component view,
@ExecutionArgParam("availableList") List list) {
//Your Business logic
}
现在,您将如何将数据从子模式窗口传递到主窗口,因为您已在子窗口中创建了一个按钮,如下所示。
<button onClick="@command('doSort')" type="button" label="Sort" />
现在在这个 doSort()方法中执行此逻辑..
@Command
public void doSort(@ContextParam(ContextType.VIEW) Component view) {
Map<String, Object> params = new HashMap<String, Object>();
List someData = new ArrayList();
someData.add(Add some Data which you send back);
params.put("orderBySelection", someData);
Binder bind = (Binder) view.getParent().getAttribute("binder");
if (bind == null)
return;
bind.postCommand("doColumnSorting", params);
view.detach();
}
现在你将检查这行代码..
bind.postCommand("doColumnSorting", params);
这一行将为你做魔术。这一行将调用父视图模态方法,现在你在父视图模型类中并更改尊重值和NotifyChange它。可能这会对你有所帮助