2009-10-19 8 views
2

현재 내가뿐만 아니라 그것은 $.pluginname 또는 $(elm).pluginname 통해 호출되었는지 확인 if (typeof(this) == 'function')을 확인 자체를 $.fn에서 그 기능을 설정뿐만 아니라 $ JQuery와 플러그인이 ...이 나쁜 관행이며, 만약 그렇다면, 거기에있다 요소를 선택적으로 제공하는 더 좋은 방법은 무엇입니까?함수를 jQuery 객체에 연결하는 것이 좋지 않습니까?

+0

플러그인의 목적은 무엇이며 왜 jQuery 객체에 정적 메소드를 추가해야합니까? –

+0

요소를 선택적으로 전달하려고합니다. – unrelativity

답변

1

JQuery와 확장 기능은 모두 네임 스페이스에 노출이 나를 이끌 것

$.extend = $.fn.extend = ... 

이 작업을 수행 할 수 있도록하기위한 그들이 의도 믿고 :

JQuery와 소스로 모두 정의합니다. 그러나 jQuery 작성자가 두 함수를 모두 사용하도록 자체 함수를 설정 한 방법을 살펴 본다면 모범 사례를 더 잘 이해할 수 있습니다.

예를 들어 일반적으로 $ .fn 함수가 $ 함수를 호출해야합니다.

$.fn.extend({ 
    data: function(key, value){ 
    return this.each(function(){ 
     $.data(this, key, value); 
    }; 
    } 
}); 

이 방법은, 하나는 다른를 호출하고 확인을 담당하는 버전 :

$.extend({ 
    data: function(elem, key, value) {...} 
}); 

과 (약간 단순화) (많은 jQuery를 소스에서 $ .DATA 기능 등) 당신이 원한다면 $ namespace에서 정의되지 않은 'elem'매개 변수를 검사 할 수 있습니다.

+0

사실, $ .pluginname을 jQuery 객체에 연결하지 않고 호출하려고 시도했을 때 Firebug는 그것이 함수가 아니라고 말했습니다. – unrelativity

+0

위에서 설명한 것처럼 jQuery 객체에 특별히 첨부해야하고 $ namespace의 각 요소를 바로 가기로 사용하는 $ .fn 네임 스페이스에 플러그인을 작성해야합니다. jQuery.staticPlugin = 함수 (ELEM 옵션) {} 및 jQuery.fn.plugin = 기능 (옵션) {this.each 리턴 (함수() {$ .staticPlugin (이 옵션);}) ; }; –

+0

현재 가지고있는 것은 $ .fn.pluginname = function() {/ * * /}이고 그 뒤에 $ .pluginname = $ .fn.pluginname – unrelativity

2

jquery authoring 문서를 읽었습니까? 예제의 log 함수는 개발자를 위해 jquery 객체에 함수를 추가하는 표준 방법으로 간주됩니다.

+0

그래서 그것은 나쁜 관행이 아니며 실제로 많은 플러그인 작성자가 수행하는 것입니까? – unrelativity

+0

예. 이것이 플러그인이 구축되는 방법입니다. –

+0

하, 내가 그걸 알아 차리지 못한 것 같아. 어리석은 나는> _ < – unrelativity

관련 문제