2012-03-27 2 views
0

에 의존하지 위젯을 만들고,이, 나는 정말 오늘 JQuery widgets.내 코드 청소기를 만들기 위해 노력하고있어 DOM 요소

처럼, 나는 돔 요소와 관련이없는 위젯을 만들고 싶습니다 :

$.widget('ui.resaWidget', { 
    options : { 
     viewer : null 
    }... 
}); 

나는이 위젯을 전화를 발견했습니다 유일한 방법은 다음과 같습니다

:
$(aDomElement).resaWidget(); 

같은 방식으로 내 위젯을 호출 할 수있는 방법이 있나요
$.resaWidget() ? 

사실 내 위젯은 전체 페이지 생성을위한 것이므로 하나의 DOM 요소뿐입니다.

그런데 $('body').resaWidget()은 작동하지 않는 것 같습니다.

도움 주셔서 감사합니다.

답변

0

jQuery 플러그인을 만드는 몇 가지 방법이 있습니다.

가장 일반적인 것은 (실제로 jQuery.prototype와 동일 함) jQuery.fn에 기능을 추가하는 것이다

(function ($) { 
    "use strict"; 
    $.fn.foo = function (/* function parameters */) { 
     this.each(doStuff); 
     return this; //makes the function chainable 
    }; 
}(jQuery)); 

이 방법 jQuery 인스턴스의 호출 기능을 추가하는 데 사용된다. 즉 :

$(selector).foo(); 

jQuery를 UI의 위젯 공장 jQuery.fn을 확장하는 속기 방법입니다.


jQuery를 확장하는 다른 일반적인 방법은 jQuery 자체에 기능을 추가하는 것이다

(function ($) { 
    "use strict"; 
    $.foo = function (/* function parameters */) { 
     doStuff(); 
    }; 
}(jQuery)); 

이 방법은 jQuery에서 정적 호출 기능을 추가하는 데 사용된다. I.E .:

$.foo(); 

jQuery UI의 위젯 팩토리는 (현재 1.8 버전)이 정적 함수를 작성할 수 없습니다. 위젯 팩토리를 사용하는 주요 이유는 컨텍스트 보존을위한 것입니다. 컨텍스트가없는 정적 함수가있는 경우 ($() 필요 없음) 함수에 고유 한 기능을 작성하기 만하면됩니다.

+0

답장을 보내 주셔서 감사합니다. 이 솔루션을 사용하면 위젯 팩토리의 모든 구조를 잃어 버리고 개인 멤버에게는 "_"을, 공용 멤버에는 "_"을 사용할 수 없습니다. 두 가지 장점을 모두 사용할 수 있습니까? 아니면 자체 공장을 코딩해야합니까? – Vico

+0

모든 기능은 폐쇄 범위 내에서만 액세스 할 수 있습니다. 표준 JavaScript 실습은 jQuery를 사용하고 있기 때문에 사라지지 않습니다. 개인적으로는 정적으로 액세스 할 수있는 함수에 대한 팩토리가 필요하지 않습니다. – zzzzBov

0

이 질문은 오래된 질문이지만 jQuery UI 1.9에서는 위젯 프로토 타입의 defaultElement 속성을 null으로 설정하여 비 dom 기반 위젯을 만들 수 있습니다.

관련 문제