2013-01-17 2 views
2

동적 인 tabs을 생성 중입니다. 1st 탭을 만든 다음 2nd 탭 등을 만들었습니다. 내가 3rd 탭에있을 때 다른 탭을 선택할 수 없게하거나 다른 탭에서 다른 탭으로 이동할 수 없게하려고합니다.ZK 탭의 OnClick 이벤트를 중지하는 방법은 무엇입니까?

이벤트를 중지하기 위해 event.propagation();을 사용하고 있지만 작동하지 않습니다. 다른 솔루션이 있습니까?

답변

4

이 시도 :

ZUL

<zk> 
    <div apply="test.TestComposer"> 
     <tabbox> 
      <tabs id="tbs" /> 
      <tabpanels id="tps" /> 
     </tabbox> 
     <button id="btn" label="add tab" /> 
    </div> 
</zk> 

TestComposer.java

package test; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

import org.zkoss.zk.ui.Component; 
import org.zkoss.zk.ui.event.*; 
import org.zkoss.zk.ui.select.SelectorComposer; 
import org.zkoss.zk.ui.select.annotation.Listen; 
import org.zkoss.zk.ui.select.annotation.Wire; 
import org.zkoss.zk.ui.util.Clients; 
import org.zkoss.zul.Button; 
import org.zkoss.zul.Label; 
import org.zkoss.zul.Tab; 
import org.zkoss.zul.Tabpanel; 
import org.zkoss.zul.Tabpanels; 
import org.zkoss.zul.Tabs; 

/** 
* Tested with ZK 6.0.2 and ZK Pivottable 2.0.0 
* 
*/ 
@SuppressWarnings("rawtypes") 
public class TestComposer extends SelectorComposer { 
    @Wire 
    Button btn; 
    @Wire 
    Tabs tbs; 
    @Wire 
    Tabpanels tps; 
    List tabs = new ArrayList(); 
    int limit = 3; 

    @Listen("onClick = #btn") 
    public void onClick$btn() { 
     if (tabs.size() < limit) { 
      Tab tab = new Tab("Tab " + (tabs.size()+1)); 
      tab.setParent(tbs); 
      tabs.add(tab); 
      Tabpanel tp = new Tabpanel(); 
      new Label("Tabpanel " + tabs.size()).setParent(tp); 
      tp.setParent(tps); 

      if (tabs.size() == limit) { 
       tab.setSelected(true); 
       overrideBehavior(); 
      } 
     } 
    } 
    public void overrideBehavior() { 
     final Tab toSel = (Tab)tabs.get(tabs.size()-1); 
     for (int i = 0; i < tabs.size() - 1; i++) { 
      final Tab tab = (Tab)tabs.get(i); 
      tab.addEventListener(// add an EventListener 
        "onClick", // listen to onClick event 
        new EventListener() { // create an EventListener instance to add 
         public void onEvent (Event event) { // the method will be called while onClick event triggered 
          Clients.evalJavaScript("zk.log('"+tab+" clicked')"); 
          toSel.setSelected(true); // make sure the third one is selected at server side 
         } 
        } 
       ); 
       tab.setWidgetOverride("_sel", "function(notify, init) {return;}"); // prevent select at client side 
     } 
    } 
} 
+1

그때 내가 어떤 클릭에 어떤 이벤트가 발생 할 수 없습니다 오전 탭 번호는 (사실) setDisabled 사용하는 경우 tab.Actually 해당 탭을 열지 않고 탭을 클릭하면 정보 메시지가 표시됩니다. – psisodia

+0

샘플이 요구 사항에 맞게 업데이트되었습니다. – benbai123

+1

솔루션은 좋지만 zul 페이지가 아닌 java 클래스에서이 작업을 수행해야합니다. 여기서 언급 한 것과 같은 방식으로 작업을 수행 할 수있는 방법이 있습니다. – psisodia