2013-08-10 1 views
0

JavaScript로 템플릿 파서를 작성했습니다. '프로젝트'를 캘린더에 렌더링하고 클릭 핸들러를 추가합니다. 프로젝트 컨테이너를 클릭하면 다른 창에서 프로젝트 내용을로드하기 시작합니다. 여태까지는 그런대로 잘됐다. 하지만 한 번에이 클릭 처리기를 덮어 쓰고 다른 처리기로 교체해야합니다. 처음에는 쉽게 들리지만 내 프로그램은 푸시 및 폴링 서비스를 혼합하여 사용하며 프로젝트는 1 분에 여러 번 렌더링해야합니다 (최소한 첫 번째 반복에서는 완전히 대체 될 것입니다).두 번째 처리기를 강제로 실행하고 함께 바인딩하십시오.

일반 클릭 핸들러는 jQuery의 click() 메소드를 사용하여 추가되었습니다. 새로운 클릭 핸들러는 jQuery의 on() 메소드를 사용하여 추가됩니다. 모든 프로젝트를이 새 핸들러로 클릭 할 수 있어야하기 때문입니다. 이제 프로젝트가 클릭 핸들러를 다시 렌더링 할 때마다 추가 및 핸들러가 그가 추가해야하는 핸들러를 결정할 수 있도록 이 templater에서 플래그를 설정할 수 있습니다 I on :(

에 추가하기 전에 실행됩니다 프로젝트에 있지만, 다른 모듈과 상호 작용없이 우리 프로그램의 패러다임으로 각 모듈이 완료 실행해야합니다 어디 우리가 사용하고 방해한다.

어떤 제안? 나는 핸들러의 우선 순위를 수 있을까?

답변

0

당신은 이전의 클릭을 제거 할 수 있습니다 새로운 것을 바인딩하기 전에 전래 자.

$yourObject.off('click'); 
      .on('click', function(event){ 
       //do sth 
      }); 
당신이 두 개 이상의 클릭을 가지고, 오직 그들 중 일부는 이벤트 네임 스페이스 지정을 사용하여 바인딩을 해제하려면

http://api.jquery.com/off/

.

바인딩 :

$yourObject.on('click.module-name'); 

Unbinind 전용 공간에서 이벤트 핸들러를 클릭 네임 스페이스

$yourObject.off('click.module-name'); 

바인딩 해제 모든 이벤트 핸들러 :

$yourObject.off('.module-name'); 
관련 문제