ZK通用树事件处理程序

时间:2016-09-09 16:48:42

标签: model-view-controller tree zk

我有一个使用MVC模式,ZK 8版本和Tree组件作为菜单的应用程序。应用程序本身使用边框布局和Tabbox作为动态容器。菜单树代码在单击时添加选项卡。我成功地做到了这一点,但效率很低。 是否有有效的替代方法或重构方法?

代码是:

<zk>
<style src="css/style.css" />
<borderlayout>
    <north>
        <div height="120px"
            style="background:#3461b2
            url('images/banner.jpg')no-repeat;" />

    </north>

    <west title="Selamat Datang - ${sessionScope.userCredential.name}"
    size="22%" autoscroll="true" splittable="true" collapsible="true"
    vflex="max">
    <tree id="menuTree">
    <treechildren>
        <treeitem label="Daily">
        <treechildren>
        <treeitem label="Report 1">
         <attribute name="onClick">
<![CDATA[
Tab newTab;
if (mainTabbox.getTabs().hasFellow("Report 1")) {
    newTab = (Tab) mainTabbox.getTabs().getFellow("Report 1");
    mainTabbox.setSelectedTab(newTab);
} else {
    newTab = new Tab("Report 1");
    newTab.setId("Report 1");
    newTab.setClosable(true);
    newTab.setSelected(true);
    Tabpanel tb = new Tabpanel();
    Executions.createComponents("daily/report1.zul", tb, null);
    mainTabbox.getTabs().appendChild(newTab);
    mainTabbox.getTabpanels().appendChild(tb);
}
     ]]>
      </attribute>
    </treeitem>
    <treeitem label="Logs">
            <attribute name="onClick">
        <![CDATA[
Tab newTab;
if (mainTabbox.getTabs().hasFellow("Logs")) {
    newTab = (Tab) mainTabbox.getTabs().getFellow("Logs");
    mainTabbox.setSelectedTab(newTab);
} else {
    newTab = new Tab("Logs");
    newTab.setId("Logs");
    newTab.setClosable(true);
    newTab.setSelected(true);
    Tabpanel tb = new Tabpanel();
    Executions.createComponents("Logs.zul", tb, null);
    mainTabbox.getTabs().appendChild(newTab);
    mainTabbox.getTabpanels().appendChild(tb);
}
      ]]>
      </attribute>
    </treeitem>
     ...
     ...
     <center vflex="min" autoscroll="true">
       <div height="100%">
    <tabbox id="mainTabbox">
    <tabs id="tabs">
    <tab id="mainTab" label="Main" />
    </tabs>
    <tabpanels>
        <tabpanel>
        <include src="/charts/mainChart.zul" />
        </tabpanel>
                </tabpanels>
            </tabbox>
        </div>
    </center>
       ....

1 个答案:

答案 0 :(得分:0)

我通过使用onSelect侦听器属性找到了解决方案:

    <tree id="menuTree">
            <attribute name="onSelect">
            <![CDATA[
    Treeitem item = self.getSelectedItem();
    if (item != null) {
    Tab newTab;
        if (mainTabbox.getTabs().hasFellow(item.getLabel())) {
            newTab = (Tab) mainTabbox.getTabs().getFellow(item.getLabel());
            mainTabbox.setSelectedTab(newTab);
        } else {
            newTab = new Tab(item.getLabel());
            newTab.setId(item.getLabel());
            newTab.setClosable(true);
            newTab.setSelected(true);
            Tabpanel tb = new Tabpanel();
            Executions.createComponents(item.getValue().toString(), tb, null);
            mainTabbox.getTabs().appendChild(newTab);
            mainTabbox.getTabpanels().appendChild(tb);
        }
    }
        ]]>
    </attribute>
            <treechildren>
                <treeitem label="Daily">
                    <treechildren>
                        <treeitem label="Tab Label" value="somepage.zul" />

                        <treeitem label="Other Tab Label" value="otherpage.zul" />

....

参考来自:http://forum.zkoss.org/question/3675/tree-onselect-eventlistener/