2011-11-23 5 views
16

Sto lavorando su un'app per hobby e sull'uso di jQuery. I risultati vanno bene al momento, ma io sono un noob jQuery e presumo che ci siano alcuni miglioramenti significativi che posso apportare alla struttura del codice. Mettendo da parte Coffescript per il momento, una cosa che mi sono chiesto è come usare correttamente i file specifici del modello .js nella pipeline degli asset.Come lavorare correttamente con jQuery nella pipeline delle risorse di Rails 3.1?

Per esempio, quando si lavora con il mio modello d'uso, io possa avere un codice che voglio avere periodo, quando il documento è pronto. Diciamo che l'ho inserito in $(document).ready(function() {...}); nel file users.js generato da Rails 3.1.

Il giorno dopo, sto lavorando con il modello Pet e ho il codice che voglio correre con il documento è pronto. L'ho inserito in un altro $(document).ready(function() {...}); all'interno del file pets.js preparato da Rails.

Ecco dove nascono le mie domande:

  1. Come che compilazione quando viene eseguito l'app?
  2. Sto istanziando due istanze di jQuery con l'esempio sopra?
  3. Devo usare solo $(document).ready(function() {...}); una volta nell'app o Rails compila il mio codice in una singola chiamata?
  4. Cosa appartiene ai file specifici del modello .js?
  5. Esistono differenze tra le modalità di esecuzione nelle modalità di sviluppo e di produzione?

risposta

12

1) Compilazione: la pipeline di risorse Rails combina tutti i file javascript in un unico file di grandi dimensioni.

2) jQuery è caricato solo una volta, si hanno più $(document).ready funzioni, ma che non è un problema

3) Rails non fa nulla con la chiamata, e jQuery può tranquillamente gestire più di quei blocchi per pagina.

4) Si chiama un modello specifico .js, preferisco chiamarlo specifico del controller. Raggruppate insieme le funzionalità che appartengono insieme. Non importa se la cosa che li lega è un controller o un modello. Abbiamo diviso il js in file separati per renderlo più gestibile.

5) In fase di sviluppo le risorse vengono compilate su ogni richiesta, in produzione viene eseguita una sola volta. Anche in produzione potrebbe essere minimizzato e compresso.

Spero che questo aiuti.

3

cercherò di rispondere ad alcune di queste per voi. Vuoi davvero solo 1 chiamata per documento pronta per pagina, ma non importa se hai multipli. Tutto ciò che è contenuto in loro sarà il codice che viene eseguito una volta che il DOM è stato caricato nel browser. Rails non farà nulla di magico con il javascript, rimarrà lo stesso di ciò che scrivi nei tuoi file. Rails non compilerà il codice javascript in modo funky, per gli ambienti di produzione potrebbe minarlo, ma il codice effettivo rimarrà per lo più lo stesso. Questo viene eseguito dal browser, non dal server.

Non si istanziano 2 istanze poiché jQuery viene caricato solo una volta, quindi fatto riferimento. La chiamata $ (document) .ready() è essenzialmente una funzione, niente di più.

I file jquery specifici del modello possono essere utilizzati in combinazione con Ajax in un'app per rails. Quindi puoi avere file come "create.js.erb" che in realtà è un file javascript in cui puoi passare le azioni dei binari. Se vuoi attivare un codice specifico dopo un post di creazione/eliminazione, puoi usare file come questo per farlo, devi solo rispondere al javascript nel tuo controller di rotaie - ma questo è un po 'più profondo che intendi con il aspetto della tua domanda sopra.

La cosa principale da ricordare è jquery è solo JavaScript e JavaScript viene eseguito dal browser - sul front-end, senza alcuna integrazione dinamica, è sempre eseguito sul lato client e jQuery è fantastico soprattutto per manipolazione del DOM.

Speriamo che questo risolva il problema!

+0

Grazie per le informazioni aggiuntive. – Clay