如何将参数从子模型窗口传递给父视图模型

时间:2013-07-02 06:44:16

标签: java mvvm zk

使用例 使用一些参数在viewModel中的click事件上打开一个弹出窗口,以便可以在弹出窗口中加载相关数据。现在从弹出窗口中获取选定的数据模型,并将这些参数返回到父视图模式。

问题

  1. 我无法从该模型窗口获取参数,但可以将参数传递给模型窗口。
  2. 如果我错了,请纠正我,模型窗口会与View-Model / composer关联,它会在本地处理所有操作。
  3. 简而言之,当我关闭窗口时,我希望在我的父视图模型中选择/ data或ListModel,而不是使用以下代码行再次创建它,因为它不符合我的用例,我必须关闭模型弹出窗口后保持布局

    Executions.createComponents(MODEL_WINDOW_PAGE, null, map);
    

1 个答案:

答案 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它。可能这会对你有所帮助