0

我正在尝试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}inlistheader可以正常工作,但不能在@load表达式中使用?

有没有办法解决这个问题?

谢谢!

4

1 回答 1

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>
于 2013-10-17T09:56:30.717 回答