RequireJS - Módulos AMD
Un módulo en RequireJS es un objeto con ámbito y no está disponible en el espacio de nombres global. Por lo tanto, el espacio de nombres global no se contaminará. La sintaxis de RequireJS permite cargar módulos más rápido sin preocuparse por hacer un seguimiento del orden de las dependencias. Puede cargar varias versiones del mismo módulo en la misma página.
Definición de módulos
El módulo se define mediante el define()función; la misma función se utiliza también para cargar el módulo.
Pares simples de nombre / valor
Si el módulo es solo una colección de pares de nombre y valor, puede usar la siguiente sintaxis:
define({
state: "karnataka",
city: "bangalore"
});
Definición de funciones
Un módulo también puede usar una función para marcos, sin tener dependencias. Esto se puede hacer usando la siguiente sintaxis:
define(function () {
//Do setup work here
return {
state: "karnataka",
city: "bangalore"
}
});
Definición de funciones con dependencias
Si el módulo tiene dependencias, la ubicación del primer argumento (matriz de nombres de dependencia), el segundo argumento (función de definición) y el objeto de retorno que define el módulo se muestra en la siguiente sintaxis:
define(["./mnc", "./startup"],
function(mnc, startup) {
return {
state: "karnataka",
city: "bangalore",
addCompany: function() {
mnc.decrement(this);
startup.add(this);
}
}
}
);
Definición de un módulo como función
No es obligatorio que un módulo devuelva solo objetos, también se puede devolver cualquier valor válido de una función. La siguiente sintaxis se utiliza para definir un módulo como una función:
define(["./mnc", "./startup"],
function(mnc, startup) {
return function(title) {
return title ? (window.title = title) :
startup.storeName + ' ' + mnc.name;
}
}
);
Definición de un módulo con un nombre
En algunos casos, es posible que deba incluir un nombre para el módulo como primer argumento para define(). Esto se puede hacer usando la siguiente sintaxis:
define("js2/title",
["js1/mnc", "js1/startup"],
function(mnc, startup) {
//Define js2/title object in here.
}
);
Carga del módulo