0

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

问题

  1. 我无法从该模型窗口获取参数,但可以将参数传递给模型窗口。
  2. 如果我错了,请纠正我,模型窗口将在与之关联的 View-Model/composer 上,它将在本地处理所有操作。

简而言之,当我关闭窗口时,我想在我的父视图模型中选择/数据或 ListModel,而不使用以下代码行再次创建它,因为它不符合我的用例,我必须保留布局关闭模型弹出窗口后的样子

Executions.createComponents(MODEL_WINDOW_PAGE, null, map);
4

1 回答 1

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
}

现在您将如何将数据从子模式 Window 传递到主 Window ,因为您已经像这样在子 Window 中创建了一个按钮。

<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);

这条线会为你做魔法。这条线将调用父视图模态方法,现在你在父视图模型类中并更改受尊重的值并通知更改它。可能这会帮助你

于 2013-07-02T07:01:32.853 回答