RequireJS - Módulos AMD
Um módulo em RequireJS é um objeto com escopo e não está disponível no namespace global. Portanto, o namespace global não será poluído. A sintaxe RequireJS permite carregar módulos mais rápido sem se preocupar em manter o controle da ordem das dependências. Você pode carregar várias versões do mesmo módulo na mesma página.
Definindo Módulos
Módulo é definido usando o define()função; a mesma função é usada para carregar o módulo também.
Pares Simples de Nome / Valor
Se o módulo for apenas uma coleção de pares de nome e valor, você pode usar a seguinte sintaxe -
define({
state: "karnataka",
city: "bangalore"
});
Definindo Funções
Um módulo também pode usar uma função para frameworks, sem ter dependências. Isso pode ser feito usando a seguinte sintaxe -
define(function () {
//Do setup work here
return {
state: "karnataka",
city: "bangalore"
}
});
Definindo funções com dependências
Se o módulo tiver dependências, a colocação do primeiro argumento (array de nomes de dependências), o segundo argumento (função de definição) e o objeto de retorno que define o módulo são mostrados na seguinte sintaxe -
define(["./mnc", "./startup"],
function(mnc, startup) {
return {
state: "karnataka",
city: "bangalore",
addCompany: function() {
mnc.decrement(this);
startup.add(this);
}
}
}
);
Definindo um Módulo como uma Função
Não é obrigatório para um módulo retornar apenas objetos, qualquer valor válido de uma função também pode ser retornado. A seguinte sintaxe é usada para definir um módulo como uma função -
define(["./mnc", "./startup"],
function(mnc, startup) {
return function(title) {
return title ? (window.title = title) :
startup.storeName + ' ' + mnc.name;
}
}
);
Definindo um Módulo com um Nome
Em alguns casos, você pode ter que incluir um nome para o módulo como o primeiro argumento para define(). Isso pode ser feito usando a seguinte sintaxe -
define("js2/title",
["js1/mnc", "js1/startup"],
function(mnc, startup) {
//Define js2/title object in here.
}
);
Carregando Módulo