dojo/on을 사용하여 캡처 단계 (버블 링 단계) 대신 이벤트를 트리거 할 수 있습니까?Dojo/on 및 캡처 단계
답변
예, 가능합니다. http://livedocs.dojotoolkit.org/dojo/aspect
특히 전이나 주위)
모듈은 또한 방법에 관한 조언 전에 제공하는 기능을 포함하기 전에
전에. 제공된 조언 기능은 주 메소드가 호출되기 전에 호출됩니다. 사전이 함수의 서명은 다음과 같습니다
before(target, methodName, advisingFunction);
이것이 도움이된다고 나는 생각하지 않습니다. AOP는 객체 메소드에 조언 메소드를 추가하기위한 것입니다. 정확히 어떤 방법을 권하고 싶습니까? – Dancrumb
그가 위젯에서 "클릭"이벤트에 연결된다고 가정하면 그는 before (targetWidget, "onClick", function() {// 여기에서 원하는 모든 작업을 수행 할 수 있습니다. 예를 들어 소스, 대상 등을 확인하십시오 }); 왜 내가 downvote뿐만 아니라 사람이 원하는 것을 먼저 확인하지 않고도 허위 정보를 줄 것입니다 궁금해 ... 어쩌면 나는 그것 때문에 당신을 downvote해야합니까? – PEM
'onClick'이 호출되기 전에 조언 방법이 호출되지만,'onClick'은 버블 링 단계까지 호출되지 않습니다. OP가 캡처 단계에서 이벤트 처리기를 트리거하는 방법을 명시 적으로 요청했기 때문에이 대답은 제기 된 질문을 전혀 다루지 않습니다. – Dancrumb
내가 여기에의 전임자에 대한 정보를 찾고 결국() - dojo.connect(). 가치가있는 경우 dojo.connect()는 캡처 단계에서 이벤트 리스너를 지원하지 않는 것으로 보입니다. DOM 노드에 이벤트 핸들러를 필드로 추가하여 작동합니다 (예 : node["mouseclick"] = ...
). 캡처 단계에서 이벤트를 수신하려면 addEventListener를 사용해야하므로 dojo.connect()가 수행 할 수 없다는 점이 다릅니다.
dom 노드의 사용자 정의 객체에 이벤트 리스너를 추가 한 다음 해당 핸들러에서 dojo.connect()를 사용하면됩니다.
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.6.1/dojo/dojo.xd.js.uncompressed.js"></script>
<script type="text/javascript">
function forwardCaptureEvent(e) {
var listener = this.captureEventHandlers[e.type];
if (listener != null) listener.apply(this, arguments);
}
function enableCaptureEvent(domNode, eventType) {
if (domNode.captureEventHandlers == null) domNode.captureEventHandlers = {};
var evtHandlers = domNode.captureEventHandlers;
if (evtHandlers[eventType] == null) evtHandlers[eventType] = function(e) {};
domNode.addEventListener(eventType, forwardCaptureEvent, true);
}
function logEvent(label, e) {
dojo.byId("log").innerHTML += label + " " + e.currentTarget.id + " " + e.type + " " + [ '', 'capturing', 'target', 'bubbling' ][ e.eventPhase ] + "<br/>";
}
function logCaptureEvent(e) {
logEvent("capture phase:", e);
}
function logBubbleEvent(e) {
logEvent("bubble phase:", e);
}
window.onload = function() {
enableCaptureEvent(dojo.byId("test"), "click");
dojo.connect(dojo.byId("test").captureEventHandlers, "click", logCaptureEvent);
dojo.connect(dojo.byId("test"), "click", logBubbleEvent);
}
</script>
</head>
<body>
<div id="test" style="background: darkorange; padding: 20px;">
<div style="background: gold; padding: 20px;">
<div style="background: cornsilk; ">Click me.</div>
</div>
</div>
<div id="log"></div>
</body>
</html>
그래서 여기 enableCaptureEvent
및 forwardCaptureEvent
내 도우미 기능입니다. enableCaptureEvent
은 내가 말하고있는 DOM 노드에서 캡처 이벤트 리스너의 사용자 정의 객체를 만든 다음 실제로 캡처 이벤트를 수신하여이 수신기에 전달하기 위해 forwardCaptureEvent
을 사용합니다.
이러한 헬퍼를 사용하려면 enableCaptureEvent
에 DOM 노드와 연결하려는 이벤트의 이름이 필요합니다. 그런 다음 연결하기 위해 "captureEventHandlers"라는 DOM 노드의 사용자 정의 객체에 연결합니다. 이것이 내가 onload
처리기에서 수행하고있는 작업입니다. 나는 정상적인 버블 이벤트를 잡는 것을 방해하지 않는다는 것을 보여주기 위해 정상적인 dojo.connect
을 수행하고 있습니다.
- 1. 이벤트 단계 - 플렉스의 캡처 단계
- 2. Specflow 및 단계 생성
- 3. 복구 단계 : 분석 단계, 다시 실행 단계 및 마지막 실행 취소 단계
- 4. 단계 확인으로 단계 만들기
- 5. 웹캠 캡처 및 avi로
- 6. Referrer 캡처 및 저장
- 7. 웹캠 캡처 및
- 8. 캡처 된 이미지 및
- 9. setOnClickListener() 및 setOnFocusChangeListener() 캡처
- 10. 이미지 캡처 및 비교
- 11. 세션 캡처 및 수정
- 12. 캡처 및 AVFoundation
- 13. Rspec의 명령형 및 선언적 단계
- 14. 단계 리스너 및 명령 버튼
- 15. Hadoop 각 단계 사이에 매퍼가없는 스트리밍 및 다중 감속기 단계
- 16. 단계
- 17. NTFS 활동 기록 및 캡처
- 18. 플래시 비디오 캡처 및 공유
- 19. IOS에서 화면 캡처 및 인쇄
- 20. iPhone 비디오 및 데이터 캡처
- 21. 원격 화면 캡처 및 제어
- 22. Jmeter - 팝업 및 이미지 캡처
- 23. 캡처 오류 및 오류 필드
- 24. 목록 이해에서 캡처 및 출력
- 25. HTML5 비디오 캡처 및 스트리밍?
- 26. DirectShow DVD 조작 및 캡처
- 27. Google 애널리틱스 및 리드 캡처
- 28. DirectShow.net C# - 동일한 프로젝트에서 이미지 캡처 및 비디오 캡처
- 29. C++ : 1 단계 : ExtractIconEx. 2 단계: ??? 3 단계 : SetMenuItemBitmaps
- 30. 다음 단계
짧은 대답은 아니오입니다. 그러나 왜 캡처 단계에서 트리거하려고합니까? 어쩌면 이걸 성취 할 수있는 다른 방법이 있습니다. – Dancrumb