0

我有一个像这样的宏组件。

<listbox id="results">
   <listitem id='listitem' self="@{each=d}">
        <listcell label='@{d.column1}'/>
        <listcell label='@{d.column2}'/>
        <listcell label='@{d.column3}'/>  
        <listcell label='@{d.column4}'/>
   </listitem>
</listbox>

我使用 BindingListModelList 设置集合模型,就像常规列表框一样。

列表框是渲染的,但只有 1 列,并显示适配器的 toString 方法。

final List<Students>students = ...........
results.setModel(new BindingListModelList<>(students,false));

然后展示 Student 类的 toString() 方法。

我试过这个语法

<listitem id='listitem' self="@{each=${arg.includer.adapters}}">
    <listcell label='${arg.includer.adapters[self.columIndex].column1}'/>
    <listcell label='${arg.includer.adapters[self.columIndex].column2}'/>
    <listcell label='${arg.includer.adapters[self.columIndex].column3}'/>
    <listcell label='${arg.includer.adapters[self.columIndex].column4}'/>
</listitem>

HTMLMacroComponent 类有一个 getAdapters 方法,它返回要显示的数据。

public class StudentDetail extends HtmlMacroComponent{
public List<Students>getAdapters(){
    return adapters;
}
}

但我无法让它工作。当您使用 new Listbox() 创建列表框并设置不 itemRender 时,看到没有 itemRender。

4

2 回答 2

1

据我所知,问题在于您的 zul 只是添加了一个列表项(即 1,并且只有 1 个列表项),而不是告诉列表框如何渲染模型的模板。(至少从您的代码片段中,我假设您想使用模板。如果我误解了您,请告诉我。)

您的代码所做的是:解析 zul 以构建组件,这将创建您在此处定义的 1 个列表项。然后它设置模型,删除所有现有的列表项(即您在 zul 中创建的列表项),并使用 itemrenderer 或提供的模板呈现模型值。由于您也没有提供,因此默认情况下仅使用toString().

试试这样:

<listbox>
    <template name="model">
        <listitem>
            <listcell label="${each.column1}"/>
            <listcell label="${each.column2}"/>
            <listcell label="${each.column3}"/>  
            <listcell label="${each.column4}"/>
       </listitem>
    </template>
</listbox>

您可以在此处阅读有关模板的信息:https ://www.zkoss.org/wiki/ZK_Developer%27s_Reference/MVC/View/Template/Listbox_Template

或者,您可以使用Listbox.setItemRenderer()基于 Java 的渲染器而不是模板。

请注意,您在这里混淆了很多 zk 的东西:

  • @仅用于数据绑定。如果你想使用 zk 表达式语言(带大括号的东西),它以$
  • self在 zul 中不是一个好的变量名,因为当您想在 zul 的侦听器中引用它时,它已经引用了组件本身。
  • 仅当列表项 ID 获得不同的 ID 并且您知道这些 ID 时,才有意义。通常,在使用模型(即动态数据)时,ID 对您没有帮助。
于 2017-07-11T07:45:05.603 回答
1

在 ZK 论坛中提出并回答了同样的问题:

http://forum.zkoss.org/question/105543/zk-653-listbox-macrocomponent/

于 2017-07-12T07:50:23.233 回答