Meteor无法找到4行后定义的模板

时间:2016-10-18 18:05:07

标签: meteor

此代码:

//hello.js

import { Meteor } from 'meteor/meteor';
import { Template } from 'meteor/templating';

import './hello.html';

Template.hello.onCreated(function helloOnCreated() {
 // counter starts at 0
 this.counter = new ReactiveVar(0);
});

Template.hello.helpers({
 counter() {
   return Template.instance().counter.get();
 },
});

Template.hello.events({
 'click button'(event, instance) {
   // increment the counter when button is clicked
   instance.counter.set(instance.counter.get() + 1);
 },
});
<!-- hello.html -->

<body>
  <h1>Welcome to Meteor!</h1>

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

<template name="hello">
  <button>Click Me</button>
  <p>You've pressed the button {{counter}} times.</p>
</template>

<template name="info">
  <h2>Learn Meteor!</h2>
  <ul>
    <li><a href="https://www.meteor.com/try" target="_blank">Do the Tutorial</a></li>
    <li><a href="http://guide.meteor.com" target="_blank">Follow the Guide</a></li>
    <li><a href="https://docs.meteor.com" target="_blank">Read the Docs</a></li>
    <li><a href="https://forums.meteor.com" target="_blank">Discussions</a></li>
  </ul>
</template>

返回此错误:

Error: No such template: hello
    at lookup.js:189
    at Blaze.View.<anonymous> (spacebars-runtime.js:32)
    at view.js:199
    at Function.Template._withTemplateInstanceFunc (template.js:465)
    at view.js:197
    at Object.Blaze._withCurrentView (view.js:538)
    at viewAutorun (view.js:196)
    at Tracker.Computation._compute (tracker.js:311)
    at new Tracker.Computation (tracker.js:201)
    at Object.Tracker.autorun (tracker.js:576)

为防止这种情况变得荒谬,如果需要,可以使用GitHub repo

tutorial中,模板在通话结束后出现。但由于某种原因,它不会在我的页面上。如果我将模板移到呼叫之上,它会起作用,但不会之后。我不确定我做错了什么。

这是请求的目录结构。我刚开始这个项目,你好是目前唯一的一页。

directory[2]

1 个答案:

答案 0 :(得分:0)

您还应该在每个文件的顶部添加注释,仅指示工作目录。

我假设第一段代码是hello.js的内容,第二段代码是main.html的内容。我还假设您没有向我们展示hello.html的内容。

如果所有这些都属实,我可以看到您将hello.html导入hello.js但是您在hello.html内引用了main.html。我假设你的错误是Meteor被误解为哪个是正确的参考,并且抓错了。

清洁代码往往会将Meteor模板分离到自己的目录和文件中。我从main.html中删除了它们。

更新:

我认为您的问题出在您的main.js中,或者更确切地说是您的路由文件。

对于初学者来说,在代码中间导入是不好的JS实践。好的做法是:

1)导入所有绝对路径 2)添加间距 3)导入所有相对路径 4)之后不要导入

好好看看已添加到项目中的@ BlazeLayout.render,但尚未使用。试图肆无忌惮地导入JS文件永远不会起作用。您需要将参数传递给render方法,其中包括您希望呈现的模板。