2012-10-11 49 views
7

Estoy trabajando con backbone + requirejs + jquery y tengo un problema con la carga del plugin jquery en mi página html actual (plantilla html de backbone).Use el plugin jQuery con Backbone y Requirejs

No es mi requerir configuración:

require.config({ 

    paths: { 
    // ... some code about backbone config 
    jquery: '/js/lib/jquery/jquery.min', 
    'jquery.camera' : '/js/jquery/jquery.camera' 
    }, 

    shim: { 
    // ... some code about backbone config 
    'jquery.camera': ['jquery'] 
    } 
}); 

En mi página HTML diseño tengo:

<script type='text/javascript' src='/js/jquery/jquery.camera.js'></script> 

y en mi página de la plantilla que tengo:

<script type="text/javascript"> 
    jQuery(function() { 

    jQuery('#test').camera({ 
... 
</script> 

Finalmente mi navegador mesg:

Uncaught TypeError: Object [object Object] has no method 'camera' 

¿Alguna idea?

En el mismo tiempo, tengo otra pregunta, ¿cuál es la mejor manera de incluir algún código js en nuestra página actual con la columna vertebral, RequireJS, etc.

Gracias :)

+0

¿Puede proporcionar el código completo? Puede usar jsfiddle.net para esto. Parece que el complemento de la cámara jquery no está cargado. El mejor lugar donde colocar sus scripts JS está en la parte inferior de la página debido a la forma en que los navegadores descargan componentes. – maxwell

Respuesta

19

He resuelto un problema similar (Jquery.cookie) de esta manera, pero mi problema era que Jquery estaba siendo cargado y luego Jquery.cookie estaba siendo incluido, pero ya necesitaba tener JQuery como recurso estático.

Por lo tanto, paso Jquery.Cookie a la aplicación e inserta jquery.cookie solo en el ámbito de mi aplicación.

require.config({ 

    paths: { 
     'async'   : 'libs/async' 
     ,'jquery'   : 'libs/jquery' 
     ,'underscore'  : 'libs/underscore' 
     ,'backbone'  : 'libs/backbone' 
     ,'text'   : 'libs/text' 
     ,'jquery.cookie' : 'libs/jquery.cookie' // <-- cookie lives here 
    } 

    ,shim: { 
    'jquery': { 
     exports: '$' 
    } 
    ,'underscore': { 
     exports: '_' 
    } 
    ,'backbone': { 
     deps: ['underscore', 'jquery'], 
     exports: 'Backbone' 
    } 
    ,'jquery.cookie': {  //<-- cookie depends on Jquery and exports nothing 
     deps: ['jquery'] 
    } 
    } 
}); 

y luego en la clase principal de la aplicación Me añadieron

require([ 
    'jquery' 
    ,'underscore' 
    ,'backbone' 
    ,'mapApp' 
    ,'jquery.cookie' //<- this is the real trick !!! 
], 
    function ($, _, Backbone, App) { 

Después de esto yo era capaz de encontrar galletas jQuery.

BTW: no es necesario importar JQuery.camera en su html si está utilizando Require.js para recuperarlo, a menos que lo use fuera del alcance de Require.js.

+0

¡Funciona! Gracias, hombre, rock;) – Majdi

+0

Muchas gracias. He estado buscando en la web durante ~ 2 horas tratando de resolver esto. Lo único que tenía que hacer era agregar 'jquery.cookie' a la clase principal de la aplicación. Sin embargo, creo que debería haber una mejor manera de cargar los complementos de jQuery, realmente no me gusta que haya 5 parámetros en require() y solo 4 sean enviados a la función ... pero esta implementación funciona perfectamente por ahora . ¡Gracias! – skcin7

+0

ni siquiera necesita la configuración shim para jquery-cookie ya que es un módulo compatible con AMD y requiere de jquery – explunit

Cuestiones relacionadas