2012-04-27 3 views
0

나는 다음과 같은 오류가 : 나는 응용 프로그램을 실행 탭을 닫을 때OPA 서버 시간 제한

function start() 
{ 

    content = <textarea style="width:30%;" rows=1 id=#text > text </textarea> <+> 
    <div id=#copy></div> 
    Scheduler.timer(3000, function() {#copy =+ Dom.get_value(#text)}) 
    content 
} 


Server.start(
    Server.http, 
    { page:start, 
    title:"bug timer" 
    } 
) 

오류가 나타납니다 : 아래의 간단한 코드와

Error: uncaught OPA exception {OpaRPC_Server: {timeout: {client: {client: $"j98soqx7hbavgq2scg915j7mlkctdeop"$; page: $1 
042254815$}; fun_id: $"_v0_get_value_stdlib.core.xhtml"$}}} 

합니다. 탭이 닫혀 있어도 타이머가 계속 작동하는 것 같습니다.

어떻게 중지시킬 수 있습니까?

감사합니다,

kayhman는

답변

1

당신은 당신의 문제를 해결하기 위해 여러 가지 방법이있다. 첫 번째는 예약 된 기능에 의해 예외가 시작될 때 타이머를 명시 적으로 중지하는 것입니다. 그와 같은 일을 :

그러나이 문제는 타이머가 서버 측에서 실행되기 때문에 발생합니다 (시작 기능으로 생성되기 때문에).

따라서 클라이언트 측에서 타이머를 설정하는 것이 더 좋습니다. 이렇게하는 방법은 여러 가지가 있습니다.

1 - 타이머 @client에 태그를 지정하면 클라이언트 최상위에서 실행됩니다. 그러나 약간 "폭력적"입니다. 왜냐하면 모든 페이지에서 실행되기 때문입니다.

@client x = Scheduler.timer(3000, function() {#copy =+ Dom.get_value(#text)}) 

2 - onready 이벤트에서 시작하면 div #copy가 준비되면 타이머가 시작됩니다.

function start() 
{ 
    content = <textarea style="width:30%;" rows=1 id=#text > text </textarea> <+> 
    <div id=#copy onready={function(_){ 
    Scheduler.timer(3000, function() {#copy =+ Dom.get_value(#text)}) 
    }} 
    ></div> 
    Scheduler.timer(3000, function() {#copy =+ Dom.get_value(#text)}) 
    content 

}