2012-05-04 10 views
22

Esta aplicación Meteor extremadamente simple está lanzando un error Template is not defined en la carga. La aplicación es esencialmente idéntica al proyecto repetitivo (meteor create), simplemente se divide en directorios de servidor/cliente/público.¿Qué causa "La plantilla no está definida" en Meteor?

Meteor parece estar tratando de representar las etiquetas de manubrios template antes de que el objeto de plantilla global esté realmente listo. Cuando puedo acceder a la consola JS y escribir "Plantilla", está allí.

¿He hecho algo mal, o es un error de tiempo?

+0

¿Dónde incluyes esta plantilla para usar? Parece que está intentando incluir la plantilla antes de cargar meteor.js – dwerner

+0

Meteor maneja la agrupación e incluye todos los archivos js en su proyecto, por lo que no es posible incluir la plantilla antes de meteor.js.Si te estoy entendiendo bien. De cualquier manera, la respuesta seleccionada muestra cuál fue el problema. – mwcz

+1

Recibí este problema cuando cambié 'UI.registerHelper' a la nueva' Template.registerHelper'. Debe ser que la 'UI' obsoleta solía definirse para el servidor y el cliente, pero 'Template' se define solo para el cliente. –

Respuesta

9

Hm, tal vez esto va a resolver su problema:

Tenga en cuenta que el cuerpo de la etiqueta incluye el nombre de la plantilla, pero no la plantilla:

<body> 
    {{> hello}} 
</body> 

<template name="hello"> 
    {{greet}} 
</template> 

Además, tenga en cuenta que ".greet" se refiere a {{ saludar}}:

if (Meteor.isClient) { 
    Template.hello.greet = function() { 
    return "Hey!"; 
    }; 
} 

Por lo tanto, el problema es que no se puede tener una plantilla dentro del cuerpo. En cambio, el cuerpo llama a la plantilla con {{> hello}} como en el código anterior.

+4

Ahora es 'Meteor.isClient' y no' is_client' –

+0

gracias a que funciona para mí. –

0

Trate Template.hello.this para pasar los datos a este {{}}

27

Usted necesita asegurarse en su archivo .js que llama a la plantilla se envuelve en if (Meteor.isClient){}, de lo contrario el Template won var global' estar disponible por alguna razón

+2

¿Por qué este comportamiento? ¿Necesito este truco incluso si uso diferentes carpetas de cliente/servidor? – Hamal000

+0

Estaba en la misma posición de carpetas separadas para el cliente y el servidor. Después de hacer esto, el error desapareció. Pero no estoy 100% seguro de si esta es la solución adecuada. No deberías necesitar hacer esto. Tal vez mi servidor de meteoritos murió y no sabía que el navegador almacena en caché y parece que la aplicación aún se ejecuta. – KJW

+0

Esto es lo que me sucedió, olvidé agregar '," client "' en 'api.addFiles()' en 'package.js'. –

0

Este es un problema de inicialización. Estoy usando Meteor 1.0 y resolví el problema agregando Meteor.startup(function() {} o un bloque if a Meteor.isClient.

esto puede ser un error, porque la documentación en los directorios especiales como dice a continuación (a partir de hoy):

Cliente: Cualquier cliente directorio llamado no está cargado en el servidor. Similar a envolver su código en if (Meteor.isClient) {...}. Todos los archivos cargados en el cliente se concatenan automáticamente y se minimizan cuando están en modo de producción. En el modo de desarrollo, cada archivo se envía de forma individual para una depuración más sencilla. Los archivos HTML en una aplicación Meteor se tratan de forma bastante diferente de un marco de servidor. Meteor escanea todos los archivos HTML en su directorio para tres elementos de nivel superior: <head>, <body> y <template>. Las secciones de cabeza y cuerpo se concatenan por separado en una sola cabeza y cuerpo, que se transmiten al cliente en la carga inicial de la página.

Pero sin inicialización, esto falla con un "Error de plantilla no encontrada".

5

Si esto en un paquete de asegurarse de que tiene plantillas en la lista de uso API es decir

api.use ('plantillas', 'cliente');

Eso garantiza que su código se ejecute una vez que se crea una instancia del objeto Plantilla.

+0

debe aceptarse respuesta – ZuzEL

Cuestiones relacionadas