2011-02-23 4 views
1

가이 순차적으로 같은 일을 몇 가지 코드 :dojo는 전체 페이지에서 모든 이벤트를 가져올 수 있습니까?

  1. 도장의 설정 값을 하나의 위젯과 onchange를 이벤트를 트리거합니다.
  2. 위젯의 onchange 이벤트에 dojo.connect하십시오.

원래 1 단계의 이벤트는 2 단계에서 설정 한 이벤트 처리기에 의해 감지되지 않을 것이라고 생각합니다. 그러나 제 가정은 잘못되었습니다.

dojo.connect 전에 모든 이벤트를 가져 와서 모두 죽이려고하면 dojo.connect가 이전에 발생한 이벤트를 catch 할 수 없게됩니다.

dojo.stopAllEvent와 같은 것이 가능할까요? 그렇게하면, 내 dojo.connect 코드가 불필요한 이벤트를 올바르게 무시합니다.

미리 감사드립니다.

답변

0

제목 질문에 대한 답을 모르겠지만, 나는 onChange oddness에 대해 생각해 보았습니다.

나는 당신과 같은 것을 가정했을 것이다. 그러나 폼 위젯의 값을 설정할 때, onChange 이벤트는 타임 아웃으로 해고된다. dijit.form._FormWidget에서 :

// setTimout allows hidden value processing to run and 
// also the onChange handler can safely adjust focus, etc 
this._onChangeHandle = setTimeout(dojo.hitch(this, 
    function(){ 
     this._onChangeHandle = null; 
    this.onChange(newValue); 
    }), 0); // try to collapse multiple onChange's fired faster than can be processed 

이것은 당신의 2 단계 진행 및 이벤트가 실제로 트리거 전에 두 번째 onChange 청취자 을 첨부 것을 의미한다. 문제를 해결하기 위해 할 수있는 일은 set 메서드의 세 번째 인수를 사용하는 것입니다.

yourFormWidget.set("value", myNewValue, false); 

세 번째 인수는 priorityChange이고, false로 설정하면 onChange 이벤트가 트리거되지 않습니다. 희망이 도움이됩니다. (#dojo를 가르쳐 주신 #dojo에게 감사드립니다.)

+1

환영합니다 :) (여기에서 멋진 회의가 있습니다!) –

+0

감사합니다. 당신은 정말로 도움이되었습니다. –

0

실제 질문은 단순히 이벤트를 연결하기 전에 set 전화에서 변경 사항을 "듣는"것을 피하는 방법 일 뿐이므로 잠재적 인 대답은 본질적으로 그가 이전에 중계 한 Frode에게 말했다.

dijit.form._FormWidget 화재는 onChange이며, 이는 현재 기능 체인이 실행을 마친 후에 만 ​​실제로 실행되도록합니다. 따라서 현재 connect은 실제로 원하지 않는 onChange 발사와의 경쟁에서 실제로 승리합니다. 그러나 시간 초과 내에서 실제 연결을 수행하여 "잃어 버리도록"강제 할 수 있어야합니다.

예 : 프로 데의 제안이 당신의 목적을 위해 충분 경우 물론 http://jsfiddle.net/kfranqueiro/ur8tf/

은, 그것은 눈에 잠재적으로 더 쉽다.

+0

고맙습니다. 당신은 정말로 도움이되었습니다. –

관련 문제