2011-02-13 5 views
3

프로젝트 용 키보드 위젯을 만들고 있는데, $.ui.mouse을 확장 중입니다. 클릭 동작 (_mouseCapture에 의해 트리거되지 않음)이 필요합니다. 그 안에 this.options을 되 찾을 어려움을 겪고 있습니다. 아래 코드 블록을 참조하십시오위젯 인스턴스를 jQuery 위젯 안에 어떻게 가져 옵니까?

$.widget("ui.keyboard", $.ui.mouse, { 
    widgetEventPrefix: "keyboard", 
    options: { 
     [...] 
    }, 
    [...], 
    _create : function() { 
     var self = this; 
     this.element.bind('click.'+this.widgetName, function(e) { self._mouseClick(e, self); }); 
    }, 
    _mouseClick: function(e, self) { 
     // how do i get this.options here -> self.options 
    } 
}); 

또는이 :

$.widget("ui.keyboard", $.ui.mouse, { 
    widgetEventPrefix: "keyboard", 
    options: { 
     [...] 
    }, 
    [...], 
    _create : function() { 
     this.element.bind('click.'+this.widgetName, this._mouseClick); 
    }, 
    _mouseClick: function(e) { 
     // how do i get this.options here 
    } 
}); 

은이 작업을 수행하는 것이 가장 좋습니다

$.widget("ui.keyboard", $.ui.mouse, { 
    widgetEventPrefix: "keyboard", 
    options: { 
     [...] 
    }, 
    [...], 
    _create : function() { 
     this.element.bind('click.'+this.widgetName, this._mouseClick); 
    }, 
    _mouseClick: function(e) { 
     var self = $.data(this, "keyboard"); 
     // how do i get this.options here -> self.options 
    } 
}); 

내가 수동으로 트리거 할 때 나는 마지막에 문제가 있었다 $ .data는 내가 this.element (꽤 논리하다)을 클릭하지 않으면 작동하지 않습니다.

다른 방법이 있습니까? 어느 것을 고르는 것이 가장 좋습니다?

감사합니다,

답변

1

이 같은 개체를 반환 익명 함수를 호출 할 수 있습니다

$.widget("ui.keyboard", $.ui.mouse, function(){ 
    var self; 

    return { 
    widgetEventPrefix: "keyboard", 
    options: { 
     [...] 
    }, 
    _create : function() { 
     self = this; 
     this.element.bind('click.'+this.widgetName, function(e) { self._mouseClick(e, self); }); 
    }, 
    _mouseClick: function(e, self) { 
     // do something with self.options 
    } 
    } 
}()); 

당신이 _mouseClick- 내에서 자체에 대한 액세스 권한이 방법

+0

내부'_mouseClick''이 '방금 클릭 한 DOM 요소입니다. 따라서이 옵션은 설정되지 않습니다. – Olivier

+0

hm ... 답변을 업데이트했습니다. 그게 효과가 있니? – StefanS

+0

그것은 좋은 연습 (나는 $ .widget에서 상속 mecanics를 많이 깨뜨릴 수 있지만 확실하지 않은 것 같아요) 내 예제 모두 내 예제에서 작동합니까, 난 그 일을 sth 싶지 않아, 나는 최고의 연습 조언을 원한다. ! 어쨌든 고마워. – Olivier