22

这个极其简单的 Meteor 应用程序Template is not defined在加载时会引发错误。该应用程序本质上与样板项目 ( meteor create) 相同,只是拆分为 server/client/public 目录。

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

我做错了什么,还是这是一个计时错误?

4

5 回答 5

27

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

于 2013-07-25T20:38:39.210 回答
9

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

请注意,body 标签包含模板名称但不包含模板:

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

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

另外,请注意“.greet”指的是 {{greet}}:

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

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

于 2012-05-04T04:06:46.220 回答
5

如果这在一个包中,请确保您的 api 使用列表中有模板,即

api.use('模板', '客户端');

这可确保您的代码在模板对象被实例化后运行。

于 2015-02-24T23:12:51.663 回答
0

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

于 2012-05-04T04:11:52.870 回答
0

这是一个初始化问题。Meteor.startup(function () {}我正在使用Meteor 1.0,我通过 ifMeteor.isClient.

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

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

但如果没有初始化,这将失败并出现“找不到模板错误”。

于 2014-11-16T16:51:10.033 回答