위젯

2012-01-23 4 views
4
나는 다음과 같은 코드가

내부에서 JQuery와 위젯을 보유하고 사업부 개체를 얻을 :위젯

<div id="widHolder"></div> 
<script type="text/javascript" language="javascript"> 
    $('#widHolder').widgetName({ 
     optionOne: false, 
     optionTwo: 1, 
     onComplete: function (holder) { 
      // ... do something here with the 'widHolder' object such as $(holder).addClass(x,y) 
     } 
    }); 
</script> 

위젯 자체 내에서을의의 onComplete 방법은 위젯의 전체 초기화 후 즉시 호출됩니다. 위젯 내의 코드가 위젯이 링크 된 객체 (이 경우에는 'widHolder'라는 ID를 가진 div)를 참조하기를 원합니다.

저의 목표는 위에 열거 된 oncomplete 함수를 작성하여 지주 객체를 빠르고 쉽게 참조 할 수있게하는 것입니다. 위젯 자체의 코드는 onComplete 함수를 호출하여 매개 변수로 전달해야합니다. 플러그에서와

this.element : 여기

JQuery와 UI 위젯 공장 경유 가능한 요소하게

(function ($) { 
    $.widget("ui.widgetName", { 
     options: { 
      // ... other options that can be set 
      onComplete: undefined 
     }, 

     // called on the initialization of the widget 
     _init: function() { 
      // do initialization functions... 

      if(this.options.onComplete) 
       this.options.onComplete(I_WANT_TO_SEND_THE_DOM_ELEMENT_HERE); 
     }, 
    } 
}) 
+0

사용중인 페이지에 대한 링크가 있거나 더 많은 코드를 볼 수 있습니까? 코드가 얼마나 오랫동안 남아 있더라도 코드를 이해하는 것보다 진행 상황을 해석하는 것이 더 어렵습니다. – mowwwalker

답변

6

플러그인 JQuery와 UI 위젯의 코드 샘플이다.

자세한 내용을 보려면 여기를 봐주십시오 : http://wiki.jqueryui.com/w/page/12138135/Widget%20factory

은 귀하의 질문에 대답 더 나은 것이 있습니까?

(function ($) { 
    $.widget("ui.widgetName", { 
     options: { 
      // ... other options that can be set 
      onComplete: undefined 
     }, 

     // called on the initialization of the widget 
     _init: function() { 
      // do initialization functions... 

      if(this.options.onComplete) 
       this.options.onComplete(this.element); 
     }, 
    } 
}) 

사이드 노트 - 당신이 당신의 플러그인 안에 다른 폐쇄를 만들 경우, 당신은 this에 대한 참조를 저장해야합니다. 예를 들어 :

(function ($) { 
    $.widget("ui.widgetName", { 
     options: { 
      // ... other options that can be set 
      onComplete: undefined 
     }, 

     // called on the initialization of the widget 
     _init: function() { 
      // do initialization functions... 
      var self = this; 
      $.each(an_array_or_something_obj, function(){ 
       //here this will refer to the current element of the an_array_or_something_obj 
       //self will refer to the jQuery UI widget 
      }); 
      if(this.options.onComplete) 
       this.options.onComplete(this.element); 
     }, 
    } 
}) 
+0

위젯 내에서 "this"를 사용하면 위젯 자체를 언급하게됩니다. 나는이 도구를 여러 번 사용해 왔지만, 여기서는 그렇게하려고 노력하지 않습니다. 여기에서는 위젯 자체를 반환하고 싶지 않지만 위젯이 연결된 컨테이너입니다. 나는 "this.container"와 같은 것을 사용할 수있을 것이라고 확신하지만 그 구문이 무엇인지 모른다. – Adam

+0

귀하의 질문에 답변 - 이것은 jQuery UI 플러그인입니다. 나는 꽤 광범위하기 때문에 전체 플러그인 코드를 게시하지 않을 것이다. 이것은 전체 플러그인에 대한 작은 업데이트 일 뿐이다. – Adam

+0

@Adam - jQuery UI는 위젯이 호출 된 DOM 요소를 참조하도록 'element'속성을 설정하는 것과 같이 기본적인 배관을 처리합니다. 귀하의 예를 추가하고 위의 내 대답을 편집했습니다. – Jonathan

0

사용 this.offsetParent는 경우, 귀하의 예에서와 같이, 홀더는 위젯의 직접적인 부모입니다.

+0

나는 this.offsetParent와 $ (this) .offsetParent를 시도했지만 어느 것도 작동하지 않았다. 위의 I_WANT_TO_SEND_THE_DOM_ELEMENT_HERE에 이걸 넣었습니다. 플러그인 코드 샘플을 포함하도록 질문을 업데이트했습니다. 아마도 내가 뭔가 잘못하고있는 것 같습니다. 뭔가 빠졌는지 알려주세요. – Adam

+0

@ Adam, 죄송합니다. 'this'의 범위는 자바 스크립트에서 항상 벗어날 수 있습니다. 무엇을 언급하는지 보려면'console.log (this)'를 시도해보십시오. – mowwwalker

+0

@Walkerneo - 항상 클로저를 나타냅니다. 그래서 Adam의 경우 jQuery UI 위젯입니다. 일반적인 jQuery 플러그인에서, 이것은'init' 메소드에서 플러그인이 호출 된 jQuery 오브젝트를 참조합니다. – Jonathan