2013-09-01 2 views
1

Zk 6.5.11CE를 사용합니다.ZK showBusy는 장시간 작동 전에 호출되었지만 이후에 표시됩니다

모달 창에서 클릭 한 버튼이있어서 이메일을 보냈습니다. 그것은 오랜 작업이며, 대기 시간에는 Clients.showBusy를 사용하여 사용자가 모달 창을 클릭/수정하도록 차단하고 싶습니다.

여기 여기 모달 창 getModalWin라고 EventView.java winFather이 승리입니다

@Command 
@NotifyChange("*") 
public void send() { 
    Clients.showBusy(winFather.getModalWin(), "Please wait..."); 
    // ... do something ... 
    sendMail(); // it takes 2/3 seconds 
    Clients.clearBusy(winFather.getWinEvent()); 
} 

(내 홈 페이지) 자바 년대 ZUL

<window apply="org.zkoss.bind.BindComposer" 
     viewModel="@id('vm') @init('viewmodel.EventView')"> 
    ...fill the form... 
    <button label="SEND" onClick="@command('send')" autodisable="self" /> 
</window> 

()의 수 모덜 윈도우. 쇼 Busy 문제가 있습니다. 희망은 분명하다 :)

그러나 나는 웹을 검색하고있어 뭔가 흥미로운 것을 발견했다 herehere. 그래서 저는 에코 이벤트를 사용해야합니다. 사람들을 위해

을 클릭하지 않은 링크 :

<window id="w" width="200px" title="Test echoEvent" border="normal"> 
    <attribute name="onLater"> 
    doLongOperation(); //take long to execute 
    Clients.clearBusy(); //remove the busy message 
    </attribute> 
    <button label="Echo Event"> 
    <attribute name="onClick"> 
     Clients.showBusy("Execute..."); //show a busy message to user 
     Events.echoEvent("onLater", w, null); //echo an event back 
    </attribute> 
    </button> 
</window> 

질문 (들) :

  1. 아마 문제를 해결할 수있는 유일한 기회가 에코 이벤트를, 또는 나는 showBusy를 만들기 위해 뭔가를 할 것을 잊었다 제대로 작동합니까?
  2. 내 zul 페이지에서 코드를 정말로 원하지 않으므로 어떻게 내 viewModel에서 내용을 정의 할 수 있습니까?

내가 같은 문제를 가지고

busy = true; // Clients.showBusy(winFather.getModalWin(), "Please wait..."); 
... 
busy = false; // Clients.clearBusy(winFather.getModalWin()); 

와 바인더 제본 값 내가 보내는 이메일 동안 사용하지 않으려는 모든 구성 요소에

disabled="@load('vm.busy')" 

및 대체 클라이언트 showBusy 및 clearBusy으로 할당하는 경우, zul 구성 요소가 비활성화되기 전에 전자 메일이 전송됩니다. 동기화 문제 인 것 같습니다.

답변

2

안녕하세요 은 난 당신이 내 목표 구성 요소에 onClientInfo 무시했습니다 것을 볼 수 있습니다, 그래서 당신은이 이벤트를 호출하는 경우, 당신은 당신의 목표에 도달 할 수 있습니다 내 코드에서, 이전에 같은 문제가 없었다.

@Listen("onClick = #addRejectDocumentBtn") 
public void openWaiting() { 
    Clients.showBusy(saleRejectMainPageWin,"please wait..."); 

    saleRejectMainPageWin.addEventListener(Events.ON_CLIENT_INFO, new EventListener<Event>() { 
     @Override 
     public void onEvent(Event event) throws Exception { 
      LongOperationExample();  <- here is my long operation     

      Clients.clearBusy(saleRejectMainPageWin); 
     } 
    }); 


    "Here you can call the event" 
    Events.echoEvent("onClientInfo", saleRejectMainPageWin, null); 

} 
+0

안녕하십니까. 그러나 MVVM을 사용하고 있으므로 프로젝트에 내 솔루션을 적용 할 수 없습니다. – barracus

+0

@barracus 안녕하세요, 다시 당신을 위해 내 코드를 변경했습니다.이 새 코드는 MVC 또는 MVVM에 종속되지 않습니다. 이 코드를 테스트했으며 필요한 기능이 정확히 있습니다. –

+0

도움을 주셔서 감사합니다, 잘 작동합니다. 다른 방법이 필요하다면 [이 예제] (https://gist.github.com/dennischen/2766642)에서 비슷한 방법으로 해결할 수 있습니다. – barracus