这个非常简单的Meteor应用程序在加载时会出现Template is not defined
错误。该应用程序与样板项目(meteor create
)基本相同,只是拆分为服务器/客户端/公共目录。
Meteor似乎试图在全局模板对象实际准备好之前渲染Handlebars template
标签。当我可以进入JS控制台并输入“模板”时,它就在那里。
我做错了什么,或者这是一个时间错误?
答案 0 :(得分:27)
您需要在.js文件中确保哪些调用模板包含在if (Meteor.isClient){}
中,否则Template
全局变量由于某种原因将无法使用。
答案 1 :(得分:9)
请注意,body标签包含模板名称,但不包含模板:
<body>
{{> hello}}
</body>
<template name="hello">
{{greet}}
</template>
另外,请注意“.greet”是指{{greet}}:
if (Meteor.isClient) {
Template.hello.greet = function () {
return "Hey!";
};
}
所以,问题在于你不能在体内有模板。相反,正文使用{{&gt;你好}},如上面的代码所示。
答案 2 :(得分:5)
如果在包中确保您在api使用列表中有模板,即
api.use(&#39;模板&#39;,&#39;客户&#39;);
确保在实例化Template对象后运行代码。
答案 3 :(得分:0)
尝试使用Template.hello.this将数据传递给{{this}}
答案 4 :(得分:0)
这是一个初始化问题。我正在使用Meteor 1.0,我通过添加解决了这个问题
Meteor.startup(function () {}
或if
阻止Meteor.isClient
。
这可能是一个错误,因为特殊目录的文档如下所示(截至今天):
客户端:服务器上未加载任何名为client的目录。类似于将代码包装在if(Meteor.isClient){...}中。在生产模式下,客户端上加载的所有文件都会自动连接和缩小。在开发模式下,每个文件都是单独发送的,以便于调试。 Meteor应用程序中的HTML文件与服务器端框架的处理方式略有不同。 Meteor会扫描目录中的所有HTML文件,以获取三个顶级元素:
<head>
,<body>
和<template>
。头部和主体部分分别连接成一个头部和主体,在初始页面加载时传送给客户端。
但是如果没有初始化,则会因“模板未找到错误”而失败。