2012-10-26 1 views
1

나는 내 자신의 플러그인을 만드는 법을 배우고 있으며, 기사를 http://docs.jquery.com/Plugins/Authoring에 강력하게 따르고 있습니다. 질문이있는 부분은 http://docs.jquery.com/Plugins/Authoring#Events과 같이 요소에 이벤트를 추가하는 것과 관련이 있습니다.http://docs.jquery.com/Plugins/Authoring 틀린가요?

라이브 데모는 http://jsfiddle.net/bhcEk/에 있습니다. 기본적으로 resize 이벤트 대신 click() 이벤트를 바인드하고 하나의 요소를 제외하고 해당 클래스의 여러 요소에 플러그인을 적용한다는 점만 제외하면 기본적으로 동일합니다.

요소를 클릭하면 (3) 경고가 나타납니다. 기사에서 가져온 아래 스크립트에서 볼 수 있듯이 each() 루프 내에 이벤트가 추가되므로 예상됩니다.

EDIT. Yicks! 그것은 나보다 더 나쁘다. 창 요소를 추가하여 클릭하면 모든 요소가 트리거됩니다. $ (this)로 $ (window)를 반환 할 수 있습니까?

기사가 잘못되어 한 번만 추가해야합니다 (삭제 된 상태에서 제거해야 함). 그러나 기사를 쓰는 사람들은 나보다 훨씬 경험이 많습니다. 그리고 저를 의심하는 것은 어리석은 일입니다. 기사가 잘못 되었습니까, 아니면 저입니까?

init : function(options) { 
return this.each(function(){ 
    $(window).bind('resize.tooltip', methods.reposition); 
}); 

답변

0

문서가 정상적으로 보입니다. 귀하의 바이올린에서 원하는 동작이 다르므로 적용되는 컨텍스트도 동일해야합니다 - this이 더 적절하다고 가정 할 때 올바른 것입니다. jQuery를에

거의 모든 것이 충돌을 피하기 위해 캡슐화 : 오랜 시간 화면 ;-)

EDIT (응답은 의견을) 쳐다보고 된 것처럼

는 소리. 혼란 스러울 위험이있는 "바인딩"은 FIFO 스택 (선입 선출 배열)과 같습니다.

이 기사의 예제에서는 서로를 인식하지 못하는 (필요하지도 않은) 여러 개별 요소에 동작을 적용했지만 예제에서는 공통 이벤트 만 공유합니다. 실제로 윈도우의 이벤트 스택에 여러 핸들러를 추가하는 이벤트에 바인딩됩니다. 아마도 간단한 의사 이상

는 :

창 크기 조정 이벤트가 트리거됩니다
window.events [ // array [ event, namespace, function ] 
    [ 'resize', 'tooltip', function(){ /* specific to element 1 */ }], 
    [ 'resize', 'tooltip', function(){ /* specific to element 2 */ }], 
    [ 'resize', 'tooltip', function(){ /* specific to element 3 */ }] 
] 

, 그것은 순서대로 스택의 각 기능을 실행합니다. "툴팁"네임 스페이스는 특정 이벤트 핸들러를 지칭하지 않으며 궁극적으로 서로 독립적 인 비슷한 핸들러 그룹의 이름입니다.

나는 그것이 의미가 있기를 바랍니다. 단어로 표현하기가 어렵습니다.

+0

감사합니다 Emissary.이 기사가 특별한 경우에 적용된다고 동의하지만 동일한 이벤트가 "창"에 여러 번 묶일 수있는 방식으로 플러그인을 작성해야합니까? 루프에있는 경우에만 항상 사용하면 안되며 루프에서 한 번 창에 바인딩합니까? – user1032531

+0

네임 스페이스를 단일 참조로 혼동시키는 것 같아요. 내 대답 - 기다려. – Emissary

+0

다시 한 번 감사장, 나는 너가 말하는 것을 얻는다. 여전히 '크기 조정', '툴팁', function() {/ 요소 1 * /}에 고유 한 부분을 표시 한 다음 요소 2와 3에 대해 고민하고 있습니다. 특정 요소 또는 다른 요소에 할당되는 위치 ? 내가 본 모든 것은 $ (window) .bind ('resize.tooltip', methods.reposition)이며, 하나 또는 그 이상의 엘리먼트를 지정하지 않는 것으로 보인다. 감사! – user1032531

0

플러그인 인스턴스와 기사의 차이점은 해당 요소의 $(window)resize() 동시 이벤트가 하나만 있다는 점입니다. 그런 다음이 기사에서는 reposition() 메서드가 실행될 때이를 기준으로 사용합니다.

예를 들어, 3 개의 .tooltip 요소가 있습니다. 3 개의 요소 중 .each()을 반환하고 $(window)에 바인딩하는 click 함수를 호출하면 실제로 각 요소의 이벤트가 실행됩니다.대신 $(window)에 바인딩의

, 이는 단지 현재 대상 (클릭 한 .tooltip)에 이벤트를 바인딩한다 ($(this)에 결합한다. 원래의

Here's a fiddle을 내가 언급 한 하나의 변화.

관련 문제