feature(util) add asyncCall

This commit is contained in:
coderaiser 2013-09-20 11:10:16 +00:00
parent 21055537d8
commit d22bef234c
2 changed files with 65 additions and 37 deletions

View file

@ -416,46 +416,48 @@ var Util, DOM, CloudFunc, CloudCmd;
lDir = DOM.getCurrentDirName(),
lName = DOM.getCurrentName(lCurrent),
lWasRefresh_b = lPath[0].textContent === pJSON[0].path;
lWasRefresh_b = lPath[0].textContent === pJSON[0].path,
lFuncs = [
CloudCmd.getFileTemplate,
CloudCmd.getPathTemplate
];
CloudCmd.getFileTemplate(function(pTemplate){
CloudCmd.getPathTemplate(function(pPathTemplate){
/* очищаем панель */
var i = lElem.childNodes.length;
while(i--)
lElem.removeChild(lElem.lastChild);
lElem.innerHTML = CloudFunc.buildFromJSON(pJSON, pTemplate, pPathTemplate);
/* если нажали на ссылку на верхний каталог*/
var lFound;
/* searching current file */
if(lWasRefresh_b){
var n = lElem.childNodes.length;
for(i = 2; i < n ; i++){
var lVarCurrent = lElem.childNodes[i],
lVarName = DOM.getCurrentName(lVarCurrent);
lFound = lVarName === lName;
if(lFound){
lCurrent = lElem.childNodes[i];
break;
}
Util.asyncCall(lFuncs, function(pTemplate, pPathTemplate) {
/* очищаем панель */
var i = lElem.childNodes.length;
while(i--)
lElem.removeChild(lElem.lastChild);
lElem.innerHTML = CloudFunc.buildFromJSON(pJSON, pTemplate, pPathTemplate);
/* если нажали на ссылку на верхний каталог*/
var lFound;
/* searching current file */
if(lWasRefresh_b){
var n = lElem.childNodes.length;
for(i = 2; i < n ; i++){
var lVarCurrent = lElem.childNodes[i],
lVarName = DOM.getCurrentName(lVarCurrent);
lFound = lVarName === lName;
if(lFound){
lCurrent = lElem.childNodes[i];
break;
}
}
if(!lFound) /* .. */
lCurrent = lElem.childNodes[2];
DOM.setCurrentFile(lCurrent);
Listeners.changeLinks(pElem);
if(lName === '..' && lDir !== '/')
currentToParent(lDir);
});
});
}
if(!lFound) /* .. */
lCurrent = lElem.childNodes[2];
DOM.setCurrentFile(lCurrent);
Listeners.changeLinks(pElem);
if(lName === '..' && lDir !== '/')
currentToParent(lDir);
});
}
/**

View file

@ -10,6 +10,32 @@ Util = exports || {};
var Scope = exports ? global : window;
Util.asyncCall = function(pFuncs, pOnLoad, pContext) {
var i, element, name, func,
n = pFuncs.length,
count = 0,
data = [];
for (i = 0; i < n; i++) {
func = pFuncs[i];
callCheckFunc(i, func);
}
function checkFunc(pNum, pData) {
++count;
data[pNum] = pData;
if (count === n)
pOnLoad.apply(pContext, data);
}
function callCheckFunc(pNum, pFunc) {
Util.exec(pFunc, function(pData){
checkFunc(pNum, pData);
});
}
},
/** setting function context
* @param {function} pFunction
* @param {object} pContext