正如我正在尝试的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));
}
但是如果用户选择多个我们将如何跟踪哪个将首先出现哪个等等...
答案 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小提琴的完全绑定样本