Mvvm 如何在ZK框架中从另一个ViewModel获取ViewModel

Mvvm 如何在ZK框架中从另一个ViewModel获取ViewModel,mvvm,zk,Mvvm,Zk,我的MVVM应用程序中有两个ViewModels。一个绑定到主窗口,另一个绑定到单击按钮后出现的弹出窗口。在弹出窗口中,我需要从主窗口绑定到所选实体。如何从PopupViewModel访问MainViewModel中的此实体?在主窗口中是否有实体列表?如果是这种情况,则需要从主窗口的视图模型将所选实体放入映射中,并将其作为createComponents的参数传递,如下所示: //In the view Model of the main window Map arg = new HashMa

我的MVVM应用程序中有两个ViewModels。一个绑定到主窗口,另一个绑定到单击按钮后出现的弹出窗口。在弹出窗口中,我需要从主窗口绑定到所选实体。如何从PopupViewModel访问MainViewModel中的此实体?

在主窗口中是否有实体列表?如果是这种情况,则需要从主窗口的视图模型将所选实体放入映射中,并将其作为createComponents的参数传递,如下所示:

//In the view Model of the main window 
Map arg = new HashMap();
arg.put("selectedEntity", SelectedEntity);
Executions.createComponents("/myPopup.zul", null, arg);
现在在弹出视图模型中,您只需在Init方法中检索实体的值:

    //PopupView model
    @Init
    public void init(@ExecutionArgParam("selectedEntity") SelectedEntity newEntity)           {

    entity = newEntity;


}

您可以注意到ExecutionArgParam中的字符串是您放在映射中的键。

主窗口中是否有实体列表?如果是这种情况,则需要从主窗口的视图模型将所选实体放入映射中,并将其作为createComponents的参数传递,如下所示:

//In the view Model of the main window 
Map arg = new HashMap();
arg.put("selectedEntity", SelectedEntity);
Executions.createComponents("/myPopup.zul", null, arg);
现在在弹出视图模型中,您只需在Init方法中检索实体的值:

    //PopupView model
    @Init
    public void init(@ExecutionArgParam("selectedEntity") SelectedEntity newEntity)           {

    entity = newEntity;


}

您可以注意到ExecutionArgParam中的字符串是您放在映射中的键。

ZK具有事件队列的概念,并具有用于多个ViewModel之间通信的全局命令,因此我们可以使用它将当前选定的实体传递给弹出窗口的ViewModel

使用此zk mvvm演示页面:

()

我在列表框中添加了一个全局命令,该命令将触发当前选定的主ViewModel提醒,该提醒需要通过弹出窗口显示:

    <listbox id="list" multiple="true" rows="6"
        model="@load(vm.reminders)"
        selectedItem="@bind(vm.selectedReminder)" 
        onSelect="@global-command('refresh', reminder=vm.selectedReminder)">
因此,现在每当您在列表框中选择一个项目时,就会在弹出的ViewModel上触发刷新方法,并将从主ViewModel获取的数据传递给它。每当您点击页面底部的“更多信息”按钮以显示弹出窗口时,它将显示当前选定实体的名称

我遵循的文档位于:

()

()


运行该示例应用程序的说明在自述文件()中。

ZK具有事件队列的概念和用于多个ViewModel之间通信的全局命令,因此我们可以使用它将当前选定的实体传递给弹出窗口的ViewModel

使用此zk mvvm演示页面:

()

我在列表框中添加了一个全局命令,该命令将触发当前选定的主ViewModel提醒,该提醒需要通过弹出窗口显示:

    <listbox id="list" multiple="true" rows="6"
        model="@load(vm.reminders)"
        selectedItem="@bind(vm.selectedReminder)" 
        onSelect="@global-command('refresh', reminder=vm.selectedReminder)">
因此,现在每当您在列表框中选择一个项目时,就会在弹出的ViewModel上触发刷新方法,并将从主ViewModel获取的数据传递给它。每当您点击页面底部的“更多信息”按钮以显示弹出窗口时,它将显示当前选定实体的名称

我遵循的文档位于:

()

()

运行该示例应用程序的说明位于()的自述文件中