2011-03-07 1 views
4

jQuery를 UI 1.8은 다음과 같은 코드를 사용하여 위젯을 확장 할 수있는 기능이 추가 된 위젯 서브 클래 싱을 수행어떻게

$.widget("my.weirdbutton", $.ui.button, { 
}); 

지금 나는 weirdbutton 만들 수 있으며 버튼처럼 많이 작동합니다

$("#myButton").weirdbutton(); 

그러나 이상한 버튼 이벤트 만 실행됩니다. 그래서 만약 내가 뭔가를 가지고 있다면

$(".button").bind("buttoncreate", function() { 
    console.log("a button was created"); 
}); 

나는 weirdbuttons의 모든 창조를 놓칠 것이다. Weirdbutton 위젯의 버튼 이벤트를 수동으로 트리거하면이 문제를 해결할 수 있습니다. 훌륭하지는 않지만 작동합니다.

더 큰 문제는이 같은 그 코드가 작동하지 않을 수 있습니다 :

$("#mybutton").weirdbutton(); 
$("#mybutton").button("option", "text", "My New Text"); 

두 번째 줄은 오히려 기존의 버튼에서 옵션을 설정하는 것보다, 새로운 하나를 만듭니다. 이 문제를 해결하는 방법을 모르겠습니다.

그래서, Liskov Substitution Principle 다음에 서브 클래 싱 된 위젯을 만드는 방법이 있습니까?

답변

3

나는 .bind 접근 방식 모르지만 초기 _create 방법을 대체하는이 방법 사용하여 수행 할 수 있습니다 : 당신이 (에서 문서를) 할 경우

$.widget("my.weirdbutton", $.ui.button, { 
    _create: function() { 
     $.ui.button.prototype._create.call(this); 
     console.log("a button was created"); 
    } 
}); 

을 :

$(function() { 
    $("#myButton").weirdbutton();  
}); 

당신은 console.log

전체 코드는 여기에 전체 코드 : http://jsbin.com/icota4/11/edit

+0

문제는 'console.log'가 내 플러그인이 아닌 ** 사용자 **에 의해 호출된다는 것입니다. 나는 그들이 정말로하고 싶은 것을 알지 못한다. (로깅은 단지 예일 뿐이다.) 위젯 코드에 그것을 하드 코딩 할 수 없다. – itsadok

+0

감사합니다 ant1j, 나는 상급 클래스의 원래 작성 방법을 호출하는 방법을 알지 못했습니다! – acme

+1

질문이 "답변"이라고 표시하는 것을 잊지 마십시오! – ant1j