2013-09-24 152 views
1

我想在點擊它的上一行時在網格中隱藏/顯示一行(從Java代碼動態填充)。模擬一個簡單的MasterDetail組件。我在java代碼中獲得了單擊行的正確索引,但是更改行的可見性不起作用!任何人都可以幫助我這個或有類似的方式來做到這一點?在ZK框架中隱藏動態網格中的行

感謝, Pooya

下面是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); 
    } 
} 

回答

2

我不知道,而不是測試,但我可以建議一個這裏給你的東西Zk有visible="true/false"屬性,你可以在每一行應用這個屬性,並將它與你的databean變量綁定關於更多的細節,我可以建議讓我們suppos e你有一個List<A> listlist包含你想要顯示的所有記錄現在在A類中添加display這樣的另一個變量,並通過你自己控制它。並且任何行上的onClick都會更新任何其他列表項。

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>