2015-02-09 16 views
7

Ich versuche herauszufinden, wie Sie eine externe Javascript-Quelle (Exhibit), sondern nur für eine einzelne Seite auf der Website einbeziehen. Kann es in der Ansicht oder Vorlage gemacht werden?Ember.js gehören externe Skript auf bestimmte Seite

Ich fand, dass einfach <script src="exhibit.js"></script> der Seitenvorlage nicht funktioniert. Wenn ich es der Vorlage für die gesamte Site hinzufüge, lädt es sich gut, aber es lädt auf jeder Seite.

Die andere Seite meines Problems möglicherweise spezifischer zu zeigen. Gibt es eine Möglichkeit, das Skript jedes Mal neu zu laden, wenn die Seite geladen wird? Beispiel: Wenn ich die Seite zum ersten Mal besuche, auf der sich das Ausstellungsskript befindet, lädt sie die Glut-App samt Exponat und die Seite wird korrekt angezeigt. Ich navigiere von der Seite weg, wenn ich auf die Seite zurückkehre, wird das Exponatskript nicht neu geladen und die Seite nicht richtig neu gezeichnet, wie es beim ersten Mal der Fall war.

+0

Bauen Sie Ihre Anwendung mit Komponenten? –

Antwort

14

Wenn Sie den Aufbau Ihrer App mit Ember CLI und exhibit.js ist eine ziemlich kleine Datei, die Sie besser dran, einschließlich exhibit.js sein könnte in Ihrer vendor.js Datei HTTP-Anfragen an mininize.

Wenn Sie jedoch exhibit.js in einer einzigen Route laden möchten könnten Sie die polyfill Methode in this answer wie so beschrieben verwenden:

// 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') 

}); 

Dadurch wird die Datei asynchron geladen werden. Die getScript docs are here - Sie sehen, Sie können auch Rückrufe verwenden.

Wenn Sie das DOM-Setup vor dem Laden nicht benötigen, können Sie die Laufschleife entfernen. Durch das Laden dieses Skripts auf dem Ereignis init des Controllers wird verhindert, dass es jedes Mal erneut geladen wird, wenn der Benutzer zur Route navigiert. Wenn Sie tun möchten, um das Skript jedes Mal zu laden, können Sie getScript auf das Ereignis didInsertElement der Ansicht verschieben.

+0

Danke! Ich habe getScript in 'didInsertElement' geschrieben und es funktioniert perfekt. – Jared

Verwandte Themen