2012-10-11 1 views
7

Sto lavorando con backbone + requirejs + jquery e ho un problema con il caricamento di jquery nella mia pagina html corrente (template hbml backbone in modo preciso).Utilizzare il plug-in jQuery con Backbone e Requirejs

C'è la mia configurazione richiede:

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'] 
    } 
}); 

Nella mia pagina html di layout che ho:

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

e nella mia pagina di modello ho:

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

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

Infine il mio browser mesg:

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

Avete qualche idea?

Nello stesso tempo ho un'altra domanda, che cosa è il modo migliore per includere del codice js nella nostra pagina corrente con spina dorsale, requirejs, ecc

Grazie :)

+0

Potete fornire il codice completo? Puoi usare jsfiddle.net per questo. Sembra che il plug-in della fotocamera jQuery non sia stato caricato. Il posto migliore dove posizionare gli script JS si trova nella parte inferiore della pagina a causa del modo in cui i browser scaricano i componenti. – maxwell

risposta

19

ho risolto un problema simile (Jquery.cookie) in questo modo, ma il mio problema era che Jquery veniva caricato e quindi Jquery.cookie veniva incluso ma richiedeva già JQuery come risorsa statica.

Così in questo modo passo Jquery.Cookie all'applicazione e inserisce jquery.cookie solo nel mio ambito applicazione.

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'] 
    } 
    } 
}); 

e poi nella classe principale applicazioni Mi aggiunto

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

Dopo questo sono stato in grado di trovare cookie di jQuery.

BTW: non è necessario importare JQuery.camera nel file html se si utilizza Require.js per recuperarlo, a meno che non lo si utilizzi al di fuori dell'ambito Require.js.

+0

Funziona! Grazie amico che rock;) – Majdi

+0

Grazie mille. Ho cercato sul web per ~ 2 ore cercando di capirlo. L'unica cosa che dovevo fare era aggiungere "jquery.cookie" alla classe dell'app principale. Comunque mi sembra che ci dovrebbe essere un modo migliore per caricare i plugin jQuery, non mi piace che ci siano 5 parametri da richiedere() e solo 4 siano inviati alla funzione ... ma questa implementazione funziona perfettamente per ora . Grazie! – skcin7

+0

non hai nemmeno bisogno dello shim config per jquery-cookie dato che è un modulo AMD-compatibile e richiede il jquery – explunit