require¶
webix.
require
(module, callback, master)¶webix.require helper.
Please look into the linked official documentation.
References¶
- helpers
_modules()
,ajax()
,codebase()
,exec()
.
External references¶
Code¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | webix.require=function(module, callback, master){
var promise = webix.promise.defer();
if (callback && callback !== true)
promise = promise.then(function(){ callback.call(master || this); });
if (webix.require.disabled){
promise.resolve();
return promise;
}
//multiple files required at once
if (typeof module != "string"){
var count = module.length||0;
if (!count){
// { file: true, other: true }
for (var file in module) count++;
var callback2 = function(){
count--;
if (count === 0)
promise.resolve();
};
for (var file in module)
webix.require(file, callback2, master);
} else {
// [ file, other ]
var callback2 = function(){
if (count){
count--;
webix.require(module[module.length - count - 1], callback2, master);
} else {
promise.resolve();
}
};
callback2();
}
return;
}
if (webix._modules[module] !== true){
var fullpath = module;
if (!module.toString().match(/^([a-z]+\:)*\/\//i))
fullpath = webix.codebase + module;
//css, async, no waiting
if (module.substr(module.length-4) == ".css") {
var link = webix.html.create("LINK",{ type:"text/css", rel:"stylesheet", href:fullpath});
document.getElementsByTagName('head')[0].appendChild(link);
promise.resolve();
return promise;
}
//js, async, waiting
if (callback === true){
//sync mode
webix.exec( webix.ajax().sync().get(fullpath).responseText );
webix._modules[module]=true;
} else {
if (!webix._modules[module]){ //first call
webix._modules[module] = [promise];
webix.ajax(fullpath, function(text){
webix.exec(text); //evaluate code
var calls = webix._modules[module]; //callbacks
webix._modules[module] = true;
for (var i=0; i<calls.length; i++)
calls[i].resolve();
});
} else //module already loading
webix._modules[module].push(promise);
}
} else
promise.resolve();
return promise;
};
|