Meteor中导致“模板未定义”的原因是什么?

时间:2012-05-04 03:44:41

标签: javascript meteor

这个非常简单的Meteor应用程序在加载时会出现Template is not defined错误。该应用程序与样板项目(meteor create)基本相同,只是拆分为服务器/客户端/公共目录。

Meteor似乎试图在全局模板对象实际准备好之前渲染Handlebars template标签。当我可以进入JS控制台并输入“模板”时,它就在那里。

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

5 个答案:

答案 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>。头部和主体部分分别连接成一个头部和主体,在初始页面加载时传送给客户端。

但是如果没有初始化,则会因“模板未找到错误”而失败。