2012-12-24 2 views
1

프로젝트 (jQuery 없음)에 순수 WinJS를 사용하고 있고 저에게 곤란한 요구 사항이 있습니다.WinJS 객체에 대한 이벤트/이벤트 리스너를 열거합니다.

DOM 요소가 'bob'이라고 가정 해 봅시다 (반드시 DOM 요소 일 필요는 없지만). 이벤트 리스너를 부착하려면, 내가 이런 짓을 했을까 :

bob.addEventListener('click', function() 
{ 
    // Some code goes here 
}); 

아무것도 심지어 같은 이벤트 이름에 대한 이벤트 리스너에 '밥'을 많이 추가하는 저를 중지하지가 (그들은 단지 대기중인 미세하다) - 여기에 문지름이있다!

주어진 개체에 연결된 이벤트/수신기를 열거 할 수 있어야 런타임시 그 중 일부를 선택적으로 대체하거나 조정할 수 있습니다.

이것을 달성하는 방법에 대한 의견이 있으십니까?

답변

0

첨부 된 이벤트 수신기를 열거 할 수있는 경우가 있습니다.

개체에 'Events'Mixin을 사용하는 경우 혼합 된 메서드 (addEventListener, removeEventListener 또는 dispatchEvent) 중 하나를 호출하면 대상 개체에 _listeners라는 속성이 생깁니다. 이미 존재하지 않음). 이 사람을 도움이

/* 
* Counts the number of attached listeners 
*/ 
countListeners: function() 
{ 
    var count = 0; 

    if (this._listeners) 
    { 
     var key; 

     for (key in this._listeners) 
     { 
      if (this._listeners.hasOwnProperty(key)) 
      { 
      count++; 
      } 
     } 
    } 

    return count; 
} 

희망 :

실제적인 예를 들어

, 여기이 믹스 인을 사용하는 객체에 연결된 이벤트 리스너의 수를 세는 함수입니다!

g

2

addEventListener를 사용하여 추가 된 이벤트를 열거 할 수 없습니다. 당신이 이벤트를 추가하는 방식은 권장되지 않습니다 (적어도 저로서는 :). addEventListener를 사용하고 있지만 익명 메소드를 사용하고 있습니다. 그렇게하면 핸들을 사용하지 않아서 해당 이벤트를 제거 할 수 없습니다. 함수를 작성한 다음 명명 된 함수 (myelement.addEventListener("event", myfunction))를 할당하는 것이 좋습니다. 요소에 이벤트를 추가 할 때마다 컬렉션 (요소 자체에 매달린 배열)에 이벤트를 추가하면 이벤트 목록이 표시됩니다.

+0

안녕하세요 jeremy! 두려워 말고, 나는 이미 청중을 제거하는 것이 현명하다. 내 질문을 설명하는 것은 너무 조잡한 예이다 :-) 그래서 이벤트 핸들러 큐에 접근 할 방법이 없다? :-( – gplumb

+0

필요에 따라 동작을 제어 할 수있는 고유의 디스패처를 만들면 특별한 필요가있을 경우 별도의 이벤트 목록을 만들 수도 있습니다. 그러나 전자가 핸들러의 라이브 ' 가장 좋은 패턴입니다 –

+0

'이벤트'믹스를 무시하는 것이 하나의 방법입니다. 감사합니다 모두들! – gplumb