在zk中使用带有mvvm模型的模板时,静态行不在网格中呈现

时间:2013-11-18 11:49:58

标签: java mvvm zk zul zk-grid

<grid vflex="1" model="@bind(vm.getModel())">
        <columns menupopup="auto">
            <column label="Name" sort="auto(name)" />
            <column label="Type" sort="auto(type)" />
        </columns>
        <rows>
        <row>
            <button label="Left" />   // This do not render
            <label value="Right" />   // This do not render
        </row>
        <template name="model">
            <row>
                <label value="@bind(each.name)" />
                <label value="@bind(each.type)" />
            </row>
        </template>
        </rows>
    </grid>

grid有两列。

第一行是静态的,其余的是使用template呈现的。 生成的网格不会渲染静态行...它将模板化的行渲染得很好.. 为什么Zk没有渲染静态行?

1 个答案:

答案 0 :(得分:1)

我以前遇到过这样的问题。问题的核心是ZK提供了两种设置grid内容的方法,这适用于listboxtree等。

一种方法是在ZUL中手动将row组件添加到grid,就像在此处一样,或者用myGrid.getRows().getChildren().add(myRow);之类的Java手动添加grid

设置row内容的另一种方法是使用ZK的模型概念。

不幸的是,正如您所发现的,这两个概念是相互排斥的 - 它们无法组合。当您考虑模型的工作原理时,这是有道理的。如果您要向模型添加新对象,它将在grid中显示为新的row。同样,如果您要从模型中删除对象,则相应的grid将从grid中消失。因此,{{1}}用于呈现模型中所有对象的实时视图。您在ZUL中硬编码的行不是由模型中的对象表示的,因此不会呈现。

我为你看到两个好的解决方案,第一个是合并这两个概念:为什么你需要这个静态行?它不能表示为模型中的对象吗?如果没有,第二个解决方案是重新考虑你正在做什么。我怀疑这一行不属于网格,你可以获得更好的UI和UX体验,将其移出网格。如果您有特定的用户体验方案,那么您需要提供反馈意见,ux.stackexchange.com网站就是您的最佳选择。