2012-02-16 3 views
1

jQuery UI 위젯 팩토리 패턴을 사용하여 위젯 자체에 대한 전역 참조가 만들어 졌습니까?jQuery UI Widget Factory 현재 위젯의 컨텍스트 가져 오기

나는 위젯에 해당하는 위젯 VAR 설정과 같은 일을 시도했다 :

$.widget("my.widget") 

I : 나는 또한 같은 jQuery를 통해 위젯의 컨텍스트를 잡아 시도했습니다

$.widget("my.widget", { 
    _widget: this, 
    _create: function() { 
    // _widget should == the whole widget 
    } 
}); 

을 위젯의 내부에서 어떻게 위젯을 다시 호출 할 수 있는지를 알 수 없습니다. 당신은 '이'키워드를 통해 인스턴스를 참조 위젯 방법 내부 하다니

답변

1

:

당신이 방법에있어, 쓸 때 종종의 경우와 같이 (컨텍스트가 변경된 것을 발견하면
$.widget('my.widget', { 
    foo: true, 
    _create: function() { 
     var foo = this.getFoo(); 
    }, 
    getFoo: function() { 
     return this.foo; 
    } 

}); 

jQuery를가) 당신은 단지에 대한 참조를 저장할 수있는 '이'로컬 VAR에 :

$.widget('my.widget', { 
    foo: true, 
    _create: function() { 
     var self = this; 
     this.element.click(function() { 
      var foo = self.getFoo(); 
     }); 
    }, 
    getFoo: function() { 
     return this.foo; 
    } 

}); 
1

으로는 앞서 언급 한, this 위젯에서 위젯 함수를 호출하는 가장 일반적인 방법입니다. 당신의 예에서

, 그것은 감각이 작업을 수행하지 않습니다

_widget: this 

을 당신이 _widget 변수에 도착 이미 컨텍스트를해야하기 때문이다.

위젯에서 직접 가져 오지 않는 이벤트에 이벤트 핸들러를 만들 때와 같이 쉽게 액세스 할 수있는 위치에 컨텍스트를 저장할 수없는 경우가 있습니다. 의 이름을 통과, 당신은 jQuery 오브젝트에 .DATA() 함수를 호출 할 수 있습니다 어느 쪽 event.target 인스턴스에서, 또는 컨트롤의 ID에서 당신이 컨트롤을 얻을 수있는 경우 Learning To Use the Widget Factory

에서

, 위젯. 그러나 위젯 이름에는 점 대신 대시를 사용하십시오.

var $control = $('#' + myControlId); 
var $widget = $control.data("my-widget"); 
$widget.getFoo(); 
관련 문제