1

我试图在单击前一行时隐藏/显示网格中的一行(从 Java 代码动态填充)。模拟一个简单的 MasterDetail 组件。我在 java 代码中获得了单击行的正确索引,但是更改行的可见性不起作用!谁能帮我解决这个问题,或者有类似的方法吗?

谢谢,普亚

这是 ZUL 的代码:

<?xml version="1.0" encoding="UTF-8"?>
<zk xmlns="http://www.zkoss.org/2005/zul">
    <window id="callbackLogWindow"
            apply="CallbackLogWindowComposer"
            border="none" height="100%" width="100%"
            xmlns:w="http://www.zkoss.org/2005/zk/client">
        <grid id="callbackLogGrid" oddRowSclass="non-odd" height="100%">
            <columns>
                <column label="Logging Name" />
                <column label="Status" />
                <column label="DateTime" />
                <column label="Subject" />
                <column label="Replies" />
            </columns>
            <rows>
                <zk forEach="${callbackLogWindow$composer.callbacks}">
                    <row sclass='${forEachStatus.index % 2 != 0 ? "z-grid-odd" : ""}'
                    onClick="callbackLogWindow$composer.toggleRow(self.index)">
                        <custom-attributes callback="${each}"/>
                        <cell><label value="${callback.loggingName}" /></cell>
                        <cell><label value="${callback.resolved}" /></cell>
                        <cell><label value="${callback.callbackTime}" /></cell>
                        <cell><label value="${callback.subject}" /></cell>
                        <cell><label value="${callback.resolvedItemCount}" /></cell>
                    </row>
                    <row sclass='${forEachStatus.index % 2 != 0 ? "z-grid-odd" : ""}'>
                        <cell colspan="5">
                            <include src="callbackItem.zul" callback="${each}"/>
                        </cell>
                    </row>
                    <row>
                        <custom-attributes callback="${each}"/>
                        <button onClick="callbackLogWindow$composer.saveCallbackItems(callback)">
                           Save
                        </button>
                    </row>
                </zk>
            </rows>
        </grid>
    </window>
</zk>

和控制器:

public class CallbackLogWindowComposer extends SelectorComposer<Window> {

    @Inject private CallbackDao callbackDao;
    @Wire Grid callbackLogGrid;
    private List<Callback> callbacks = new ArrayList<Callback>();

    @Override
    public void doAfterCompose(Window window) throws Exception {

        super.doAfterCompose(window);
    }

    public List<Callback> getCallbacks() {

        callbacks = callbackDao.findAll();
        return callbacks;
    }

    public void toggleRow(int i) {

        Component row = callbackLogGrid.getRows().getChildren().get(i+1);
        row.setVisible(row.isVisible());
        callbackLogGrid.renderAll();
    }

    public void saveCallbackItems(Callback cb) {
        callbackDao.saveInTransaction(cb);
    }
}
4

2 回答 2

2

我不确定也没有测试,但我可以在这里向您建议一件事 Zk 有visible="true/false"属性,您可以在每一行中应用此属性并将其与您的 databean 变量绑定有关更多详细信息,我可以建议让我们假设您有一个List<A> listlist包含所有现在要显示的记录添加另一个变量,例如display在类中A并由您自己控制它。并且onClick在任何行更改时更新列表的任何其他项目。

于 2013-09-24T10:43:40.247 回答
0

我有同样的问题,我找到的解决方案是:

行可见=""

            <grid model="@bind(vm.total)" vflex="1" emptyMessage="No records exist" width="315px" >
            <columns>
                <column width="45%"/>
                <column width="25%" />
            </columns>
            <template name="model">
                <row visible="@load(each.visible)">
                    <checkbox   label="@load(each.label)" style="font-weight:bold" if="${each.checkbox}"/>
                    <label      value="@load(each.label)" style="font-weight:bold" unless="${each.checkbox}"/>
                    <doublebox  value="@bind(each.value)" sclass="textBoxNumber" locale="us" readonly="true" />
                </row>
            </template>  
        </grid>
        </groupbox>     
于 2017-09-21T20:13:20.867 回答