【dojo】dojo.ready(dojo.addOnLoad) "전문"

최근의 프로젝트에서는 Dojo 프레임워크를 사용했고, 페이지마다 Dojo를 대량으로 사용했다.ready는 페이지 초기화 작업을 완성합니다.하지만 어떤 이유로 모든 Dojo가 필요합니다.준비되기 전에 할 일이 있어요.
Dojo 1.6 이전(1.6 포함)에는 좀 번거로웠다.소스 코드:
dojo.ready = dojo.addOnLoad = function(/*Object*/obj, /*String|Function?*/functionName){
		d._onto(d._loaders, obj, functionName);

		if(d._postLoad && d._inFlightCount == 0 && !d._loadNotifying){
			d._callLoaded();
		}
	}
초기화 방법을 진정으로 실행하는 것은 Dojo이다.loaded:
dojo.loaded = function(){

	d._loadNotifying = true;
	d._postLoad = true;
	var mll = d._loaders;

	//Clear listeners so new ones can be added
	//For other xdomain package loads after the initial load.
	d._loaders = [];

	for(var x = 0; x < mll.length; x++){
		mll[x]();
	}

	d._loadNotifying = false;
	
	if(d._postLoad && d._inFlightCount == 0 && mll.length){
		d._callLoaded();
	}
}
Dojo를 통해.addOnLoad에 추가된 function은 dojo._loaders의 그룹에 있습니다.
그러면 loaded 방법을 다시 쓸 수밖에 없습니다.
dojo._inits = [];
dojo.addInit = function(obj) {
   dojo._inits.push(obj);
};

dojo.loaded = function(){
	var d = dojo;
	d._loadNotifying = true;
	d._postLoad = true;

    var mll = [];
    for(var i=0; i<d._loaders.length; i++) {
        console.log(d._loaders[i]);
    	mll.push(d._loaders[i]);
    	if (d._loaders[i].toString().indexOf('registerWin') > -1)
    	    for(var j=0; j<d._inits.length; j++)
    	    	mll.push(d._inits[j]);
    	}
    }

	d._loaders = [];
	d._inits = [];

	for(var x = 0; x < mll.length; x++){
		mll[x]();
	}

	d._loadNotifying = false;
	if(d._postLoad && d._inFlightCount == 0 && mll.length){
		d._callLoaded();
	}
}
저는 Dojo에 가입했습니다_addInit를 통해 등록하는 방법을 저장하는 inits 배열.그리고 Dojo를 통과하는 모든 것을 검사하세요.ready/addOnLoad 가입 방법,dijit에서 등록을 완료(이때 Dojo parse가 종료됨)한 후_inits에 삽입하는 방법이렇게 하면 나는 도조를 통과할 수 있다.addInit는 프레임워크에 처리를 추가하여 항상 Dojo에 있게 합니다.ready/addOnLoad 가입 방법이 실행되기 전에 실행됩니다.
테스트:
dojo.ready(function() { console.log(1); });
dojo.ready(function() { console.log(2); });
dojo.addInit(function() { console.log('init'); });
결과:
 : init
 : 1
 : 2

Dojo 1.7부터 Dojo.js는 대부분 다시 썼다.dojo.ready의 인터페이스도 변했다.
var ready = dojo.ready = dojo.addOnLoad = function(priority, context, callback)
priority 우선순위 파라미터를 추가하면 위의 실현은 크게 간소화할 수 있다.기본적으로 Dojo를 통과합니다.ready(function() {...}) 가입 방법, 기본priority = 1000.
이렇게 하면 아래의 코드를 쉽게 처리할 수 있다.
dojo.addInit = function(obj) { dojo.ready(1, obj); };

좋은 웹페이지 즐겨찾기