lazo-next
Version:
A client-server web framework built on Node.js that allows front-end developers to easily create a 100% SEO compliant, component MVC structured web application with an optimized first page load.
48 lines (41 loc) • 1.44 kB
JavaScript
define(['underscore'], function (_) {
'use strict';
return function (cmpName, options) {
if (typeof cmpName !== 'string') { // TODO: better error handling??? just prints the stack to the screen
return onError(new Error('The parameter "cmpName" must be a string'));
}
function onError(error) {
_.delay(options.error, 0, error);
}
function onCtlLoad(controller) {
try {
controller._execute(options.action, {
success: function (controller) {
_.delay(options.success, 0, controller);
},
error: function (err) {
return onError(err);
}
});
} catch (error) {
return onError(error);
}
}
options = _.defaults(options || {}, {
action: 'index',
name: cmpName,
error: function () {
return;
},
success: function () {
return;
}});
// loader is used by ctl.addChild; requiring at run time prevents the circular dependency
LAZO.require(['lazoCtl'], function (Ctl) {
Ctl.create(cmpName, _.pick(options, 'ctx', 'name'), {
success: onCtlLoad,
error: onError
});
});
};
});