ZK Framework: обновление динамического макета с использованием foreach - PullRequest
0 голосов
/ 16 мая 2018

Я использую forEach "myList" для рисования элементов.Теперь, когда я обновляю данные в «myList», моя страница не может перерисоваться.Я пытался использовать invalidate (), но не в порядке.Пожалуйста, помогите мне.Большое спасибо.

Мой код ниже:

<vlayout id="mainLayout" >
        <groupbox hflex="1" mold="3d" open="${forEachStatus.index==0}" forEach="${vm.myList}">
            <caption label="${each.groupName}" sclass="customIcon">
                <span id="arrow-${forEachStatus.index}" class="open-${forEachStatus.index}" />
            </caption>
            <vlayout hflex="1" spacing="10px">
                <groupbox hflex="1" mold="3d" forEach="${each.listData}" open="false">
                    <caption label="${each.groupName}" sclass="customIcon">
                    </caption>

                    <listbox emptyMessage="Empty data" mold="paging" pageSize="10"
                             sizedByContent="true" hflex="1">
                        <!--Listbox content here-->
                    </listbox>

                </groupbox>
            </vlayout>



        </groupbox>
    </vlayout>

ViewModel

 @Command("onSearch")
@NotifyChange("myList")
public void onSearch() {
    try {
        //Business OK here, reload myList OK
        if(mainLayout!=null){
            mainLayout.invalidate();
        }
    } catch (Exception e) {
        mLogger.error(e.getMessage(), e);

    }

}

1 Ответ

0 голосов
/ 16 мая 2018

Не видя полного кода (или хотя бы большего его количества), трудно помочь.Похоже, вы используете MVC и MVVM.Я рекомендую придерживаться MVVM.В частности, это может быть полезно.

Используйте children в вашем vlayout для итерации по вашим myList элементам:

<vlayout children="@load(vm.myList)">
    <template name="children">
        <groupbox hflex="1" mold="3d" open="@load(each.index eq 0)">
            <!-- contents of groupbox here -->
        </groupbox>
    </template>
</vlayout>

В вашем onSearch()метод, который вам не нужно аннулировать mainLayout.@NotifyChange("myList") должен перезагрузить ваш myList (при условии, что у вас есть метод получения в вашем классе ViewModel)

...