1

正如我正在尝试的那样这个例子很好地定义了Nabil Abdel-Hafeez

它可以很好地解决我在跟踪器中提到的一些小问题。但我想打开一个 DualBox 模式窗口,其中一个列表框包含所有标题名称,其他列表框将包含我们要为列表框显示的标题(我用 getitemrendered 做到了这一点)。我想使用相同的 ZUL 代码而不getitemrendered 方法。但用户可以隐藏他/她不想看到的列表框的标题。有人做过这种事情吗? 这里

带有 + 符号的绿色图像显示了我想要实现的相同内容。

当我尝试使用 Nabil Abdel-Hafeez但我的问题是我将提供双重列表框,用户可以在其中选择他/她希望在列表框中看到的标题,用户可以通过单击按钮选择标题,用户可以添加一个标题或全部来自双重列表框的标题,当用户单击双重列表框的重新排序按钮时,它将重新排序。在 Nabil 演示中,他正在做这样的事情..

for (Listitem item : lHead.getListbox().getItems()) {
  item.insertBefore(item.getChildren().get(from), item.getChildren().get(to));
}

但是,如果用户选择多个我们将如何跟踪哪个将首先出现哪个第二个等等..

4

1 回答 1

0

您可以尝试将 MVVM 与 forEach 结合使用,这样您就可以构造字符串数组来显示,这从 6.0.2 开始有效

例如,

祖尔

<zk>
    <div apply="org.zkoss.bind.BindComposer"
        viewModel="@id('vm') @init('test.TestVM')">
        <listbox model="@load(vm.model)">
            <listhead>
                <listheader forEach="${vm.headers}" label="${each}" />
            </listhead>
            <template name="model" var="cells">
                <listitem>
                    <listcell forEach="${cells}" label="${each}" />
                </listitem>
            </template>
        </listbox>
        <button label="original seq" onClick="@command('originalSeq')" />
        <button label="reverse" onClick="@command('reverse')" />
    </div>
</zk>

虚拟机

package test;

import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.NotifyChange;

import org.zkoss.zul.ListModel;
import org.zkoss.zul.ListModelList;

import java.util.*;

public class TestVM {
    private int[] _original = {1, 2, 3};
    private int[] _reverse = {3, 2, 1};
    private int[] _seq = _original;
    private List _rawData;

    public String[] getHeaders () {
        String[] headers = new String[_seq.length];
        for (int i = 0; i < _seq.length; i++) {
            int idx = _seq[i];
            headers[i] = (idx == 1? "First Name" :
                            idx == 2? "Last Name" :
                            idx == 3? "Age" : "");
        }
        return headers;
    }
    public ListModel getModel () {
        if (_rawData == null) {
            getRawData();
        }
        List modelData = new ArrayList();
        for (int i = 0; i < _rawData.size(); i++) {
            Person data = (Person)_rawData.get(i);
            String[] cells = new String[_seq.length];
            for (int j = 0; j < _seq.length; j++) {
                cells[j] = data.getValue(_seq[j]);
            }
            modelData.add(cells);
        }
        return new ListModelList(modelData);
    }
    public void getRawData () {
        _rawData = new ArrayList();
        _rawData.add(new Person("First Name 01", "Last Name 01", 21));
        _rawData.add(new Person("First Name 02", "Last Name 02", 22));
        _rawData.add(new Person("First Name 03", "Last Name 03", 23));
    }
    @Command
    @NotifyChange("model")
    public void originalSeq () {
        _seq = _original;
    }
    @Command
    @NotifyChange("model")
    public void reverse () {
        _seq = _reverse;
    }
    class Person {
        private String _firstName;
        private String _lastName;
        private int _age;

        public Person (String firstName, String lastName, int age) {
            _firstName = firstName;
            _lastName = lastName;
            _age = age;
        }

        public String getFirstName () {
            return _firstName;
        }
        public String getLastName () {
            return _lastName;
        }
        public int getAge () {
            return _age;
        }
        public String getValue (int i) {
            return i == 1? getFirstName() :
                    i == 2? getLastName() :
                    i == 3? getAge() + "" : "";
        }
    }
}

关于forEach,请参考ZK迭代评估

编辑

ZK fiddle 上的完全绑定样本

列表框重新排序单元格

于 2013-01-14T16:18:31.613 回答