我正在尝试在我的模板中生成可变数量的listbox
es:
<listbox forEach="${vm.columns}" model="@load(vm.getData(each))">
<listhead>
<listheader label="column${each}" width="260px" />
</listhead>
</listbox>
ViewModel(简化)看起来像这样:
public class MyViewModel {
private static final int COLUMN_COUNT = 3;
private List<Integer> columns = new ArrayList<>();
@Init
public void init() {
for (int i = 0; i < COLUMN_COUNT; i++) {
columns.add(i);
}
}
public List<Integer> getColumns() {
return columns;
}
public void setColumns(List<Integer> columns) {
this.columns = columns;
}
public List<Picture> getData(Integer pos) {
System.out.println("GET DATA = " + pos);
// rest of the code ...
}
}
因此生成部分工作正常,我可以看到生成了3个列表框,每个列中标题为“column0”,“column1”和“column3”。但是当我调查日志时,我发现getData
方法被调用了3次,但始终使用参数= 0:
2013-10-15T21:16:55.758+0200|INFO: GET DATA = 0
2013-10-15T21:16:55.847+0200|INFO: GET DATA = 0
2013-10-15T21:16:55.849+0200|INFO: GET DATA = 0
也许有人可以解释,为什么在${each}
中使用变量listheader
可以正常工作,但不能在@load
表达式中使用?
有没有办法解决这个问题?
谢谢!
答案 0 :(得分:0)
你可以这样重写:
<vlayout children="@load(vm.columns)">
<template name="children" var="lb">
<listbox model="@load(vm.getData(lb))">
<listhead>
<listheader label="@load('column'.concat(lb))" width="260px" />
</listhead>
</listbox>
</template>
</vlayout>