2013-07-30 3 views
2

다음 스크립트는 검도 UI 콤보 상자 컨트롤의 필수 필드 배경색을 렌더링합니다. 이 스크립트는 완벽하게 잘 작동하지만 이해하기 어렵습니다. 내가 무엇을 말할 수에서이 코드 블록을 이해하려고 시도했습니다.

는 그렇게 UI 콤보 상자 개체를 검도와에 할당 할 _input라는 사용자 정의 속성 또는 메서드 를 부착와 함께 시작합니다 새로운 변수 _originalFunction하지만 다음 줄에 다시 체인 객체를 사용하고 대신이 변수를 사용하는 것보다 나는 실제로 얻지 못했고 반환 된 결과를 이벤트를 청취하는 익명의 함수에서 얻은 에 할당합니다.

일반적으로이 함수 내부에서 무슨 일이 일어나고 반환 값은 무엇인지 알 수 없습니다.

누군가 이해할 수있는 방식으로 설명해 주시겠습니까? 검도의 ComboBox 라이브러리에서 여기에 무슨 일이 일어나고 있는지

(function ($) { 
    var _originalFunction = kendo.ui.ComboBox.fn._input; 
    kendo.ui.ComboBox.fn._input = function (e) { 
     var result = _originalFunction.call(this, e); 
     if (this.input) { 
      this.input.addClass('required'); 
     } 
     return result; 
    } 
})(jQuery); 

답변

1

_input은 입력 요소에 클래스 required를 추가하도록 향상되었습니다. 그러면 할당 라인 _originalFunction 대신 kendo.ui.ComboBox.fn._input 사용할 경우

하면 로컬 변수 _originalFunction의 값을 변경하지 함수 검도

(function ($) { 
    var _originalFunction = kendo.ui.ComboBox.fn._input; // store the original function to a variable so that it can be called later 
    kendo.ui.ComboBox.fn._input = function (e) { // overwrite the _input function 
     var result = _originalFunction.call(this, e); // call the original function to apply default functionality 
     if (this.input) { // additional functionality is added here 
      this.input.addClass('required'); 
     } 
     return result; 
    } 
})(jQuery); 

원래 법으로 칭함 따라서 단일 매개 변수를 받아 원래의 메서드를 호출 할 때 우리는 예상했던 것과 동일한 컨텍스트와 매개 변수를 사용해야합니다. 즉, 행의 이유는 _originalFunction.call(this, e)입니다. 그러나 그 방법 서명의 향후 변경에 대해 안전하기 때문에 _originalFunction.apply(this, arguments)으로 작성하는 것이 더 낫습니다.

+0

나는 무엇을 성취하려고 노력하고 있는가? 그러나 스크립트를 단계별로 이해하고 싶습니다. 이벤트가있는 함수는 무엇입니까? –

+0

이벤트가있는 함수는 무엇입니까? –

+0

위의 의견을 게시하는 동안 고맙다는 답변을 얻었습니다. –

0

이것은 검도의 ComboBox _input 메서드의 동작을 수정합니다. 이 함수의 원래 값을 변수 _originalFunction에 저장 한 다음 함수에 새 정의를 제공합니다. 새 정의는 원래 메서드를 호출하고 결과를 저장하고 required 클래스를 콤보 상자의 입력 필드에 추가 한 다음 저장된 결과를 반환합니다.

+0

$가 매개 변수 인 경우, 이 함수는 범위를 생성하는 데 사용되는 자체 실행 익명 함수이므로 변수가 모두 로컬이고 전역 공간을 오염시키지 않으며 결국 $ jQuery로 함수가 실행됩니다.이 $는 jQuery를 전달하는 한 가지 방법입니다. 로컬 범위. (jQuery의 $는 일반적으로 글로벌이기 때문에 필자는 그 필요성에 대해 조금 궁금해 하긴했지만). – Paul

+0

@Paul이 코드에서는 코드에'$'참조가 없기 때문에 완전히 불필요합니다. 그것은 단지 누군가의 상용구 일뿐입니다. – Barmar

관련 문제