ZK框架:使用foreach刷新动态布局

时间:2018-05-16 05:07:18

标签: java-ee foreach zk

我正在使用forEach" myList"绘制元素。现在,当我在" myList"中更新数据时,我的页面无法重绘 我试过使用invalidate()但不行 请帮帮我 非常感谢。

我的代码如下:

<vlayout id="mainLayout" >
        <groupbox hflex="1" mold="3d" open="${forEachStatus.index==0}" forEach="${vm.myList}">
            <caption label="${each.groupName}" sclass="customIcon">
                <span id="arrow-${forEachStatus.index}" class="open-${forEachStatus.index}" />
            </caption>
            <vlayout hflex="1" spacing="10px">
                <groupbox hflex="1" mold="3d" forEach="${each.listData}" open="false">
                    <caption label="${each.groupName}" sclass="customIcon">
                    </caption>

                    <listbox emptyMessage="Empty data" mold="paging" pageSize="10"
                             sizedByContent="true" hflex="1">
                        <!--Listbox content here-->
                    </listbox>

                </groupbox>
            </vlayout>



        </groupbox>
    </vlayout>

视图模型

 @Command("onSearch")
@NotifyChange("myList")
public void onSearch() {
    try {
        //Business OK here, reload myList OK
        if(mainLayout!=null){
            mainLayout.invalidate();
        }
    } catch (Exception e) {
        mLogger.error(e.getMessage(), e);

    }

}

1 个答案:

答案 0 :(得分:0)

没有看到完整的代码(或至少更多的代码),很难提供帮助。看起来你正在使用MVC和MVVM。我建议坚持使用MVVM。具体来说,this可能很有用。

使用m["a"] 中的children来迭代vlayout个元素:

myList

<vlayout children="@load(vm.myList)"> <template name="children"> <groupbox hflex="1" mold="3d" open="@load(each.index eq 0)"> <!-- contents of groupbox here --> </groupbox> </template> </vlayout> 方法中,您不需要使onSearch()无效。 mainLayout应重新加载@NotifyChange("myList")(假设您的ViewModel类中有getter方法)