2011-12-06 7 views
11

La maggior parte delle guide di rotaia 3.1 per quanto riguarda la pipeline di asset e il javascript templating mi portano a credere che la pipeline delle risorse raccoglierà qualsiasi file * .jst e li schiaffa in una variabile JST disponibile per il tuo * .js File. Tuttavia, sto attualmente stumped con il seguente errore quando provo a caricare un template * .jst:JST indefinito per applicazione rota 3.1

Uncaught ReferenceError: JST is not defined

Tutti gli indicatori?

risposta

7

La variabile JST sembra avere impostare se si includono correttamente gli elementi del modello javascript nel file app/assets/application.js in modo che possano essere inclusi attraverso il gasdotto risorsa:

//= require templates/your_template.jst

includono Poi il modello JavaScript nel corrispondente rotaie vista (utilizzando Haml):

- content_for :javascripts do 
    = javascript_include_tag "templates/your_template" 
+2

Perché dovresti richiedere template/your_template.jst nel manifest ma poi utilizzare javascript_include_tag sullo stesso file? Quando richiedi your_template.jst nel manifest di application.js, devi semplicemente 'javascript_include_tag 'application'' che viene eseguito di default. – tybro0103

2

Suona come è necessario l'EJS Gem, che è incluso se si utilizza il Gem rotaie-spina dorsale.

Poi basta creare un file come app/patrimoniale/javascript/foobar.jst.ejs e può essere reso chiamando

JST['foobar']()

speranza che risponde alla tua domanda.

+0

Grazie. La tua risposta è esattamente ciò che stavo cercando. A proposito, se qualcuno ha problemi con il percorso, è possibile ispezionare l'oggetto JST nella console e verrà elencato tutti i modelli noti. – Alric

23

se si utilizza una linea di richiedere come

// = require_tree ../templates

assicurarsi che la linea sia sopra la linea che include qualsiasi file che ti dà la errore.

7

Tutte le altre risposte sono sempre a questo, ma per chiarire ...

JST non è definito da ruote dentate a meno che non sono stati necessari uno o più .jst file nel manifesto.

Quindi, anche se si dispone di //= require_tree ../templates nel file manifest, il JST sarà ancora indefinito finché non si crea almeno un file .jst nella directory dei modelli.

Assicurarsi inoltre di includere la gemma EJS. Se hai incluso backbone-on-rails, ce l'hai già.

+0

Questo era esattamente il problema. È necessario disporre di alcuni file come modelli/dummy.jst.ejs – Ziggy

0

Sembra che JST non abbia nulla a che fare con Backbone o Underscore, è fatto dal back-end e risulterà l'oggetto JST e la funzione JST nelle pagine front-end.