2012-05-31 12 views
9

Estoy usando RequireJs 2.0 (o intento de usar).RequireJS usando múltiples data-main's

Actualmente, mis activos están agrupados en partes, "General" y "Personalizado". Todas las páginas deben usar los scripts generales, mientras que solo algunas páginas deben usar el Custom.

Según lo que puedo decir RequireJs, acepta un valor de data-main que contiene su configuración y básicamente la requerida por su módulo. Esto está bien si todas las páginas usan los mismos recursos, pero ¿cómo agregaría un script adicional data-main para páginas personalizadas?

¡Gracias!

Respuesta

3

Use su atributo data-main para cargar su secuencia de comandos General. En las páginas personalizadas, donde sea que esté a punto de hacer algo que requiera un módulo personalizado, simplemente envuélvalo en una llamada require. Su página maestra (o plantilla o el diseño o como se llame en su plataforma de servidor) tendrían la siguiente:

<html><head> 
<script language="javascript" src="require.js" data-main="general" ></script> 
</head> 

su página de marcado personalizado puede tener este aspecto (la sintaxis de la memoria; verificar dos veces!)

<p class="funny">I'm a funny paragraph</p> 
<script language="javascript"> 
require(['funny-stuff'], function(fs) { 
    fs.doSomthing(); 
}); 
</script> 

El módulo funny-stuff solo se cargará en las páginas que lo soliciten. Si no desea o no puede tener marcado separado en algunas páginas, puede cargar dinámicamente una dependencia de su secuencia de comandos principal envolviendo una llamada require dentro de una declaración if. Dentro de general.js:

// Determine if we need the custom module 
if (isFunnyPage()) { 
    require(['funny-stuff'], function(fs) { 
    fs.doSomething(); 
    }); 
} 

Usted tiene que tener cuidado cuando se ejecuta el optimizador, porque va a encontrar la dependencia se hace referencia en la llamada require, y por el paquete por defecto con el archivo principal. Por lo tanto, necesitaría configurar el optimizador para excluir los módulos personalizados.