문제

내용을 채우기 위해 Ajax 호출(href 속성)을 사용하여 dijit.Dialog를 만드는 코드가 있습니다.

반환된 콘텐츠를 dojo.connect로 구문 분석하여 반환된 콘텐츠의 링크에 대한 클릭 이벤트를 분석할 것입니다.

하지만 dojo.query("a",this.current_popup.domNode)를 수행하면 빈 배열이 반환됩니다.

반환된 모든 콘텐츠에 onclick을 첨부하는 방법을 아는 사람이 있나요?

도움이 되었습니까?

해결책

이벤트 핸들러를 대화 상자 위젯의 DOM 노드에 바인딩하고 이벤트 위임을 사용하여 "a" 클릭을 캡처하는 것이 비용이 더 저렴합니다.이렇게 하면 특히 대화 상자의 내용이 자주 변경되는 경우 이벤트 핸들러 정리를 피할 수 있습니다.작업을 수행하기 위해 위젯의 연결 메소드를 사용하면 이벤트 핸들러 정리를 피할 수 있습니다.

따라서 dijit.Dialog의 메소드 내에서 연결을 수행하는 경우 다음과 같은 것을 사용할 수 있습니다.

this.connect("onclick", function(evt){
    var node = evt.target;
    if("a" == node.nodeName.toLowerCase()){
        //node is an a tag, do what you want with it,
        //for example, read node.href to get the URL attached to it.
        //If you want to prevent following that URL and prevent further
        //event bubbling, stop the event:
        dojo.stopEvent(evt);
    }
});

위젯 인스턴스 외부에서 이 연결 작업을 수행하는 경우 this.connect를 사용하는 대신 widgetInstance.connect()를 사용하고 widgetInstance는 dijit.Dialog 인스턴스를 참조하는 변수라고 가정합니다.

해당 버전의 연결을 사용하면 위젯은 대화 상자 위젯이 삭제될 때 이벤트 핸들러를 자동으로 등록 취소하여 메모리 프로필을 확인합니다.

다른 팁

내가 찾은 한 가지 방법은 위젯에 지연 연결을 추가하는 것이었습니다.

dojo.connect(this.current_popup, "onDownloadEnd", function(){
      dojo.query("a.popup",this.current_popup).forEach(function(node) {
          // add your function add here

        });
});

이는 ajax 호출이 완료된 후에 실행되므로 이제 DOM에서 객체를 찾을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top