Javascript 是什么原因引起的;“未定义模板”;在《流星》中?

Javascript 是什么原因引起的;“未定义模板”;在《流星》中?,javascript,meteor,Javascript,Meteor,这个极其简单的Meteor应用程序在加载时抛出了一个模板未定义的错误。该应用程序本质上与样板项目相同(meteor create),只分为服务器/客户端/公共目录 Meteor似乎试图在全局模板对象实际就绪之前渲染把手模板标记。当我到达JS控制台并键入“Template”时,它就在那里了 我是否做错了什么,或者这是一个计时错误?嗯,也许这会解决您的问题: 请注意,body标记包括模板名称,但不包括模板: <body> {{> hello}} </body> &

这个极其简单的Meteor应用程序在加载时抛出了一个
模板未定义的错误。该应用程序本质上与样板项目相同(
meteor create
),只分为服务器/客户端/公共目录

Meteor似乎试图在全局模板对象实际就绪之前渲染把手
模板
标记。当我到达JS控制台并键入“Template”时,它就在那里了


我是否做错了什么,或者这是一个计时错误?

嗯,也许这会解决您的问题:

请注意,body标记包括模板名称,但不包括模板:

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

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

所以,问题是你不能在体内有一个模板。相反,主体使用{{>hello}}调用模板,如上面的代码所示。

尝试template.hello.this将数据传递给{{{this}

您需要确保在调用模板的.js文件中使用
if(Meteor.isClient){}
包装,否则,由于某种原因,
模板
全局变量将不可用。

这是一个初始化问题。我正在使用Meteor 1.0,通过添加
Meteor.startup(函数(){}
if
块到
Meteor.isClient

这可能是一个bug,因为特殊目录上的文档说明如下(截至今天):

客户端:服务器上没有加载任何名为Client的目录。类似于在if(Meteor.isClient){…}中包装代码。在生产模式下,客户端上加载的所有文件都会自动连接并缩小。在开发模式下,每个文件都会单独发送以便于调试。Meteor应用程序中的HTML文件与服务器端框架的处理方式有很大不同。Meteor会扫描目录中的所有HTML文件以查找三个顶级el元素:
。头部和身体部分分别连接成一个头部和身体,在初始页面加载时传输到客户端


但是如果不进行初始化,则会出现“找不到模板”错误。如果在包中有此错误,请确保api使用列表中有模板

使用('templating','client')


这确保了模板对象实例化后,代码就可以运行。

您在哪里包含此模板以供使用?听起来好像您试图在首次加载meteor之前包含模板。jsMeteor处理绑定并包含项目中的所有js文件,因此不可能在meteor.js之前包含模板对你的理解是正确的。无论哪种方式,选择的答案都显示了问题所在。当我将
UI.registerHelper
切换到新的
模板时,我遇到了这个问题。registerHelper
。一定是不推荐的
UI
过去是为服务器和客户端定义的,但
模板
只为客户端定义的。为什么是行为吗?即使我使用不同的客户端/服务器文件夹,我也需要这个技巧吗?我处于相同的位置,客户端和服务器使用不同的文件夹。在我这样做之后,错误消失了。但我不确定这是否是合适的解决方案。你不应该这样做。也许我的meteor服务器死了,我不知道浏览器缓存了看起来应用程序还在运行。这就是发生在我身上的事情,忘记在
api.addFiles()中添加
package.js中添加
“client”
。它现在是
Meteor.isClient
,而不是
is\u client
if (Meteor.isClient) {
  Template.hello.greet = function () {
    return "Hey!";
  };
}