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

mwc*_*wcz 22 javascript meteor

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

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

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

KJW*_*KJW 27

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

  • 为什么会这样?即使我使用不同的客户端/服务器文件夹,我还需要这个技巧吗? (2认同)

ran*_*ast 9

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

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

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

<template name="hello">
  {{greet}}
</template>
Run Code Online (Sandbox Code Playgroud)

另请注意,".greet"指的是{{greet}}:

if (Meteor.isClient) {
  Template.hello.greet = function () {
    return "Hey!";
  };
}
Run Code Online (Sandbox Code Playgroud)

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

  • 它现在是`Meteor.isClient`而不是`is_client` (4认同)

Joe*_*Joe 5

如果在包中确保你在api使用列表中有模板,即

api.use('templating','client');

这可确保在实例化Template对象后运行代码.