ZK重新排序与Listbox没有拖放事件

时间:2012-12-26 12:45:08

标签: zk

正如我正在尝试的This示例由 Nabil Abdel-Hafeez

定义好

它在一些小问题上工作正常,我已经在跟踪器中提到过这个问题。但我想打开一个DualBox模式窗口,其中一个列表框包含所有标题名称,其他列表框将包含我们要为列表框显示的标题(我使用getitemrendered执行此操作)。我将使用相同的ZUL代码而不使用 getitemrendered 方法。但是,用户可以隐藏他/她不想查看列表框的标题。有人做过这类事吗? Here

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

当我尝试 Nabil Abdel-Hafeez 时,我的问题是我将提供duallistbox,用户可以选择他/她希望在列表框中看到哪个标题,用户可以通过点击选择标题在按钮上,用户可以从duallistbox添加一个标题或所有标题,当用户点击duallistbox的重新排序按钮时,它将重新排序。在Nabil演示中他正在做这样的事情..

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

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

1 个答案:

答案 0 :(得分:0)

您可以尝试将MVVM与forEach结合使用,这样您就可以构造要显示的String数组,这可以从6.0.2开始

如,

<强> ZUL

<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>

<强> VM

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 Iterative Evaluation

修改

ZK小提琴的完全绑定样本

Listbox Reorder Cells