2011-03-17 41 views
13

Estoy intentando cargar un complemento usando requirejs pero de vez en cuando obtengo un error, "$ .fn no está definido" pero si recargo la página el error desaparece casi como ahora jquery se almacena en caché, el problema se elimina. Estoy cargando mis bibliotecas de esta manera:Requirejs cargando complementos

require(["jquery-1.4", "/script/jquery.autoSuggest.packed.js"], function($) { 
    $(function() { 
     //code 
    }); 
}); 

¿Puedes ver si hay algún problema con esta implementación que pueda causar este error? Requerir js está siendo añadido a la página de modo que:

<script type="text/javascript" src="http://website.co.uk/frameworks/requirejs/0.2.4/sharedmodules/require.js"> 
</script> 
<script type="text/javascript"> requireMap = { 
    "jquery-1.4":"http://website.co.uk/sharedmodules/jquery-1.4" 
}; 

    require({ baseUrl: 'http://website.co.uk/', paths: requireMap });  
</script> 

Esto no se puede cambiar, ya que es parte del marco que estoy usando.

¿Alguna sugerencia?

Gracias!

Respuesta

12

el complemento de orden se ha eliminado. utilizar loading shim como sigue

requirejs.config({ 
    paths: { 
     'jquery': 'https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min', 
     'bootstrap': '../bootstrap/js/bootstrap.min', 
     'select2': 'vendor/select2', 
     'jshashtable': 'vendor/jshashtable-2.1', 
     'jquery.numberformatter': 'vendor/jquery.numberformatter-1.2.3.min', 
     'jq-datepicker': 'vendor/bootstrap-datepicker', 
     'jq-datepicker.da': 'vendor/bootstrap-datepicker.da' 
    }, 

    // Use shim for plugins that does not support AMD 
    shim: { 
     'bootstrap': ['jquery'], 
     'select2': ['jquery'], 
     'jq-datepicker': ['jquery'], 
     'jshashtable': ['jquery'], 
     'jquery.numberformatter': ['jquery', 'jshashtable'] 
    }, 

}); 

referencia: http://requirejs.org/docs/api.html#config-shim

8

Querrá utilizar el order plugin. De forma predeterminada, RequireJS carga los scripts lo más rápido posible y pueden cargarse fuera de servicio. Sin embargo, el complemento de orden mantendrá el orden de las cargas de script.

Si usa el optimizador para optimizar sus scripts, asegúrese de incluir tanto jQuery como el complemento en el script optimizado.

+0

um. ¿eso todavía se aplica a jQuery 1.7? – Stann

+2

@Stann sí, todavía se aplica para jQuery 1.7. Mientras jQuery 1.7 se registra como un módulo AMD, el complemento jQuery probablemente no ajuste su código en un contenedor define(), pidiendo 'jquery' como una dependencia. El problema es realmente con el complemento jQuery: si se carga antes de que jQuery se haya cargado, habrá un problema, a menos que el complemento se envuelva en una llamada a define() de AMD. – jrburke

+8

Para aquellos que encontraron esta vía, el complemento de pedido no se proporciona para RequireJS 2.0, por lo que el enlace de @ jrburke anterior no ayudará. Todavía puede usar la [API 1.0 con el complemento de orden] (http://requirejs.org/docs/1.0/docs/api.html#order), pero una mejor solución es usar [2.0 con la configuración de calza] (http://requirejs.org/docs/api.html#config-shim). –

3

es posible que desee a la comprobación https://github.com/jquery-boilerplate/patterns

Tiene algún bien repetitivo jQuery plugin de código que trabajará con RequireJS.

Creo que es posible que deba actualizar su jQuery a 1.7 antes de que estos patrones funcionen para usted.

+0

El enlace que proporcionó parece estar roto, pero este enlace está OK https://github.com/addyosmani/jquery-plugin-patterns/ – Krystian

+0

Gracias, se actualizó el enlace. – troynt

Cuestiones relacionadas