2011-12-06 9 views
11

La mayoría de los carriles 3.1 tutoriales sobre la canalización de activos y las plantillas javascript me llevan a creer que la cartera de activos recogerá cualquier archivo * .jst y los insertará en una variable JST disponible para su * .js archivos. Sin embargo, actualmente estoy confundido con el siguiente error al intentar cargar una plantilla * .jst:JST undefined for carriles 3.1 aplicación

Uncaught ReferenceError: JST is not defined

Cualquier punteros?

Respuesta

7

La variable JST parece conseguir el sistema si se incluye correctamente los artículos de la plantilla JavaScript en su archivo app/assets/application.js para que puedan ser incluidos a través de la tubería de activos:

//= require templates/your_template.jst

Luego incluyen la plantilla Javascript en su correspondiente carriles vistas (usando HAML):

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

¿Por qué requeriría templates/your_template.jst en su manifiesto pero luego usar javascript_include_tag en el mismo archivo? Cuando requiera su_template.jst en el manifiesto de la aplicación.js, simplemente necesita 'javascript_include_tag 'application'' que se realiza de forma predeterminada. – tybro0103

2

suena como usted necesita el EJS gema, que se incluye si se utiliza la gema de los carriles-espina dorsal.

A continuación, sólo como crear un archivo app/activo/javascript/foobar.jst.ejs y se pueden representar llamando

JST['foobar']()

esperanza de que responda a su pregunta.

+0

Gracias. Tu respuesta es exactamente lo que estaba buscando. Por cierto, si alguien tiene problemas con la ruta, puede inspeccionar el objeto JST en la consola y aparecerá una lista de todas las plantillas conocidas. – Alric

23

si está utilizando una línea de requerir como

// = require_tree ../templates

asegúrese de que la línea está por encima de la línea que incluye cualquier archivo que está dando la error.

7

Todas las otras respuestas son cada vez más en esto, sino en resaltar ...

JST no está definido por las ruedas dentadas a menos que se les ha exigido una o más .jst archivos en el manifiesto.

Así que incluso si tiene //= require_tree ../templates en su manifiesto, JST seguirá sin definirse hasta que cree al menos un archivo .jst en el directorio de plantillas.

También asegúrese de incluir la gema EJS. Si ha incluido backbone-on-rails, ya lo tiene.

+0

Este fue exactamente el problema. Necesitas tener algunos archivos como plantillas/dummy.jst.ejs – Ziggy

0

Parece que JST no tiene nada que ver con Backbone o Underscore, lo hace el back-end y dará como resultado el objeto JST y la función JST en sus páginas de front-end.

Cuestiones relacionadas