Dojo : 이벤트 리스너 콜백에서 위젯에 대한 참조 유지

Jayflo

다음과 같은 Dojo 위젯이 있습니다.

define([
    // stuff...
], function(declare, lang, win, on, query,
    _WidgetBase, _TemplatedMixin, _OnDijitClickMixin, template){

    return declare("Toolbar", [_WidgetBase, _TemplatedMixin, _OnDijitClickMixin], {
        templateString: template,
        map: null,

        constructor: function(options) {
            // this.map set here
            lang.mixin(this, options);

            if (this.map === null) {
                console.log("Error: no map!");
            }
        },

        postCreate: function() {
            on(this.domNode, ".toolButton:click", this.loadTool);
        },

        // in the following function, this refers to element where event 
        // originated here   
        loadTool: function(e) {
            var clickedTool = "tools/Tool" + this.id[this.id.length - 1];

            require([clickedTool], function(Tool) {
                // Fails: want this.map to refer to map defined by constructor above
                (new Tool({ map: this.map })).placeAt(win.body());
            });
        }
    });
});

현재이 Toolbar위젯은 정렬 된 버튼 목록 일 뿐이며 각 버튼에는 toolButton. 버튼을 클릭하면 클릭 한 버튼과 관련된 모듈 (다른 위젯을 반환)을 조건부로로드합니다. 단순화를 위해 도구 모듈은 클릭 한 버튼 에서 가져온 tools/Tool<some_number>위치 에 이름이 지정 됩니다.<some_number>id

이 줄에서 볼 수 있듯이 위젯 map속성을 Toolbar위젯의 생성자에 전달해야합니다 Tool.

(new Tool({ map: this.map })).placeAt(win.body());

내에, 전술 한 바와 같이, 그러나 loadTool, this받는 클릭하지 된 버튼을 의미 Toolbar위젯. 한 가지 가능성은 이벤트 리스너를 다음과 같이 호출하는 것입니다.

on(this.domNode, ".toolButton:clicked", lang.hitch(this, this.loadTool);

그런 다음 id이벤트 객체에서 클릭 한 버튼을 가져옵니다 ...하지만 이것은 엉뚱한 것처럼 보이고 잘못된 처리 방법과 같습니다.

이를위한 "모범 사례"는 무엇입니까?

Bobz

가장 좋은 방법은 두 번째 접근 방식과 같이 컨텍스트를 콜백 함수에 전달하는 것입니다. 이를 통해 특히 비동기 작업에서 함수 실행 방법을 제어 할 수 있습니다.

dojo 문서에서 :

on(something, "click", processEvent);

위와 같은 비동기 콜백에서 코드가 실행되는 컨텍스트가 변경되었습니다. 더 이상 원래 제공 한 객체를 참조하지 않지만 컨텍스트는 이제 둘러싸는 객체 인 콜백을 참조합니다. 이 문제를 해결하려면 hitch ()를 사용하여 함수가 원래 컨텍스트를 유지하도록 할 수 있습니다.

올바르게 수행 된 동일한 코드는 다음과 같습니다.

on(something, "click", lang.hitch(this, processEvent));

http://dojotoolkit.org/reference-guide/1.10/dojo/_base/lang.html#dojo-base-lang-hitch

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Dojo : 이벤트 리스너 콜백에서 위젯에 대한 참조 유지

분류에서Dev

템플리트 화 된 dojo 위젯에서 작동하지 않는 이벤트

분류에서Dev

이벤트 리스너에 대한 JQuery

분류에서Dev

검도 위젯 이벤트에 대한 콜백 기능 설정

분류에서Dev

맞춤 이벤트에서 요소 이벤트 리스너 콜백이 작동하지 않음

분류에서Dev

테이블의 각 td에 대해 고유 한 이벤트 리스너 추가

분류에서Dev

보조 메뉴 열기 이벤트에 대한 Android SlidingMenu 리스너

분류에서Dev

콜백에서 타이프 스크립트 참조

분류에서Dev

자바 스크립트의 이벤트 객체에 대한 참조

분류에서Dev

on ( 'change')에 대한 이벤트 리스너를 Google지도 정보 창에 추가

분류에서Dev

Dojo 툴킷에서 동적으로 추가 된 위젯 컨텐츠에 이벤트 리스너를 첨부하는 방법

분류에서Dev

모든 이벤트 유형에 대해 자바 스크립트에서 콜백 함수 정의

분류에서Dev

부여 된 지리적 위치 권한에 이벤트 리스너 연결

분류에서Dev

localstorage에 대한 업데이트와 함께 작동하지 않는 스토리지 이벤트 리스너

분류에서Dev

개체에 대한 앞으로 참조를 유지하기위한 스마트 포인터

분류에서Dev

이벤트 리스너 콜백 내에서 호출되지 않은 res.send () Restify

분류에서Dev

Angular 2 구조적 지시문, 자식에 의해 트리거 된 비 버블 링 이벤트에 대한 명확한 뷰 참조

분류에서Dev

Dojo-동적으로 작성된 요소에 이벤트 리스너 추가

분류에서Dev

클래스에 대한 여러 이벤트 리스너

분류에서Dev

사용자 정의 레이아웃 관리자에서 하위 위젯에 대한 크기 조정 이벤트가 없습니다.

분류에서Dev

Android 데이터 바인딩 라이브러리는 콜백에 대한 강력한 참조를 보유합니까?

분류에서Dev

React : 각 자식에게 이벤트 리스너를 추가하고 부모의 이벤트 핸들러에 대한 참조를 전달하는 것이 비효율적입니까? 이벤트 버블 링이 가능합니까?

분류에서Dev

삭제 된 시트에 대한 공식 참조 유지

분류에서Dev

지시문에서 전달 된 콜백에 대한 호출 테스트

분류에서Dev

if / else 이벤트 리스너에 대한 선택기 문제

분류에서Dev

동적 추가 요소에 대한 JS 이벤트 리스너

분류에서Dev

새 요소에 대한 이벤트 리스너 (클릭)

분류에서Dev

두 개의 JTextArea에 대한 이벤트 리스너 설정

분류에서Dev

전체 심볼에 대한 이벤트 리스너 추가

Related 관련 기사

  1. 1

    Dojo : 이벤트 리스너 콜백에서 위젯에 대한 참조 유지

  2. 2

    템플리트 화 된 dojo 위젯에서 작동하지 않는 이벤트

  3. 3

    이벤트 리스너에 대한 JQuery

  4. 4

    검도 위젯 이벤트에 대한 콜백 기능 설정

  5. 5

    맞춤 이벤트에서 요소 이벤트 리스너 콜백이 작동하지 않음

  6. 6

    테이블의 각 td에 대해 고유 한 이벤트 리스너 추가

  7. 7

    보조 메뉴 열기 이벤트에 대한 Android SlidingMenu 리스너

  8. 8

    콜백에서 타이프 스크립트 참조

  9. 9

    자바 스크립트의 이벤트 객체에 대한 참조

  10. 10

    on ( 'change')에 대한 이벤트 리스너를 Google지도 정보 창에 추가

  11. 11

    Dojo 툴킷에서 동적으로 추가 된 위젯 컨텐츠에 이벤트 리스너를 첨부하는 방법

  12. 12

    모든 이벤트 유형에 대해 자바 스크립트에서 콜백 함수 정의

  13. 13

    부여 된 지리적 위치 권한에 이벤트 리스너 연결

  14. 14

    localstorage에 대한 업데이트와 함께 작동하지 않는 스토리지 이벤트 리스너

  15. 15

    개체에 대한 앞으로 참조를 유지하기위한 스마트 포인터

  16. 16

    이벤트 리스너 콜백 내에서 호출되지 않은 res.send () Restify

  17. 17

    Angular 2 구조적 지시문, 자식에 의해 트리거 된 비 버블 링 이벤트에 대한 명확한 뷰 참조

  18. 18

    Dojo-동적으로 작성된 요소에 이벤트 리스너 추가

  19. 19

    클래스에 대한 여러 이벤트 리스너

  20. 20

    사용자 정의 레이아웃 관리자에서 하위 위젯에 대한 크기 조정 이벤트가 없습니다.

  21. 21

    Android 데이터 바인딩 라이브러리는 콜백에 대한 강력한 참조를 보유합니까?

  22. 22

    React : 각 자식에게 이벤트 리스너를 추가하고 부모의 이벤트 핸들러에 대한 참조를 전달하는 것이 비효율적입니까? 이벤트 버블 링이 가능합니까?

  23. 23

    삭제 된 시트에 대한 공식 참조 유지

  24. 24

    지시문에서 전달 된 콜백에 대한 호출 테스트

  25. 25

    if / else 이벤트 리스너에 대한 선택기 문제

  26. 26

    동적 추가 요소에 대한 JS 이벤트 리스너

  27. 27

    새 요소에 대한 이벤트 리스너 (클릭)

  28. 28

    두 개의 JTextArea에 대한 이벤트 리스너 설정

  29. 29

    전체 심볼에 대한 이벤트 리스너 추가

뜨겁다태그

보관