2017-01-19 1 views
0

dijit에 프로그래밍 방식으로 특정 동작을 바인딩 할 수 있습니까?Dojo : 어떻게 향상시킬 수 있습니까?

e.e. 이 dijit/form/NumberSpinner를 프로젝트 전체에서 사용하고 있다고 가정 해 보겠습니다. 이제 모든 NumberSpinners에 onFocus: function() { console.log('hi') }을 갖고 싶습니다.

보통 내가 이런 짓을 했을까 :

  … new NumberSpinner({ 
       onFocus: function() { console.log('hi'); }, 
       … 
      }); 

를 모든 요소에. 이 메서드를 모든 NumberSpinner 인스턴스의 기본 동작으로 바인딩 할 방법이 있습니까 ??

감사합니다.

답변

1

마침내 이것을 수행하는 방법을 발견했습니다.

이 같은

확장 사용 : JSBIN에 예를 들어 작업

lang.extend(NumberSpinner, { 
    _onFocus: function() { console.log('hi'); } 
}); 

: https://jsbin.com/sesotolove/2/edit?html,output

참조 : 프로토 타입를 사용 https://dojotoolkit.org/reference-guide/1.7/dojo/extend.html

단지 덮어에 의해 달성 될 수있다

동일 피

NumberSpinner.prototype._onFocus: function() { console.log('hi'); } 

1

옵션이 모든 기능을 NumberSpinner에서 확장 사용자 정의 구성 요소를 생성하고 덮어 쓰기/추가하는 것입니다 그리고 당신이 원하는 속성이 같은 rototype.

예 : 사용자 정의 구성 요소를 코딩 한 후

응용 프로그램/CustomNumberSpinner.js

define([ 
    'dojo/_base/declare', 
    'dijit/form/NumberSpinner' 
], function(
    declare, 
    NumberSpinner 
) { 

    // The declare and the references passed in the array on the next line defines what you are extending 
    return declare([NumberSpinner], { 

    /* Add all functions/props that you want in this object */ 

    onFocus: function() { 
     console.log('Hi, this is a onFocus event being handled'); 
    }  

    }); 

}); 

, 당신은 당신이 그것을 사용하고 당신과 함께 할 것처럼 인스턴스화 할 모듈을 가져올 필요 기본 NumberSpinner를 사용했지만 생성자 args에 필요한 props/함수를 전달할 필요가 없습니다.

관련 문제