1

私がしようとしているこの例は、Nabil Abdel-Hafeezによって適切に定義されています

問題としてトラッカーですでに言及したいくつかの小さな問題で正常に動作しています。しかし、1つのリストボックスにすべてのヘッダー名が含まれ、他のリストボックスにはリストボックスに表示するヘッダーが含まれるDualBoxモーダルウィンドウを開きたいと思います(私は getitemrendered でこれを行いました)。getitemrenderedメソッドですが、ユーザーはリストボックスで見たくないヘッダーを非表示にすることができます。この種のことをした人はいますか? ここ

実装したいものと同じことを示す+記号付きの緑色の画像。

私は Nabil Abdel- Hafeezを試していましたが、私の問題は、ユーザーがリストボックスに表示したいヘッダーを選択できるデュアルリストボックスを提供することです。ユーザーはボタンをクリックしてヘッダーを選択でき、ユーザーは1つまたはすべてのヘッダーを追加できますduallistbox からのヘッダーと、ユーザーが duallistbox の [並べ替え] ボタンをクリックすると、並べ替えが行われます。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以降で機能します。

例えば、

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反復評価を参照してください。

編集

ZKフィドルで完全にバインドされたサンプル

リストボックスの並べ替えセル

于 2013-01-14T16:18:31.613 に答える