2015-02-09 5 views
7

Sto cercando di capire come includere una fonte javascript esterna (Exhibit), ma solo per una singola pagina sul sito. Può essere fatto nella vista o nel modello?Ember.js include script esterno su una pagina specifica

Ho trovato che aggiungere semplicemente <script src="exhibit.js"></script> al modello di pagina non funziona. Se lo aggiungo al modello per l'intero sito, viene caricato correttamente, ma viene caricato su ogni pagina.

L'altro lato del mio problema potrebbe essere più specifico dell'esposizione. C'è un modo per avere lo script di origine ogni volta che viene caricata la pagina? Esempio: quando visito per la prima volta la pagina che contiene lo script dell'esposizione, carica l'app ember che include la mostra e la pagina viene visualizzata correttamente. Allontanandomi dalla pagina, quando torno alla pagina lo script dell'esposizione non viene ricaricato, quindi non ridisegnare correttamente la pagina come avvenne la prima volta che è stata visitata.

+0

Stai costruendo l'applicazione utilizzando i componenti? –

risposta

14

Se si sta costruendo la tua app con Ember CLI e exhibit.js è abbastanza piccolo file che si potrebbe essere meglio compresi exhibit.js nel vendor.js file per mininize richieste HTTP.

Tuttavia, se si desidera caricare exhibit.js in un unico percorso vostra potrebbe utilizzare il metodo descritto nel ovatta this answer in questo modo:

// app/controllers/some-route-name.js  

import Ember from 'ember'; 

export default Ember.Controller.extend({ 

    loadPlugin: function() { 
    // Use run loop if you need to setup the DOM first 
    Ember.run.scheduleOnce('afterRender', this, function() { 
     Ember.$.getScript('path/to/exhibit.js'); 
    }); 
    }.on('init') 

}); 

Questo modo asincrono caricare il file. Lo getScript docs are here - vedrai che puoi anche usare le callback.

Se non è necessaria la configurazione DOM prima del caricamento, è possibile rimuovere il ciclo di esecuzione. Il caricamento di questo script sull'evento init del controller impedirà il ricaricamento ogni volta che l'utente naviga sulla rotta. Se si do si desidera caricare lo script ogni volta che è possibile spostare getScript nell'evento didInsertElement della vista.

+0

Grazie! Ho messo getScript in 'didInsertElement' e funziona perfettamente. – Jared