我目前正在读流星教程(https://www.meteor.com/try),并且遇到了一些令我困惑的模板。
在本教程中,创建了一个简单的"Todo List“应用程序。在这个应用程序中,以下HTML放在simple-todos.html文件中:
<!-- simple-todos.html -->
<head>
<title>Todo List</title>
</head>
<body>
<div class="container">
<header>
<h1>Todo List</h1>
</header>
<ul>
{{#each tasks}}
{{> task}}
{{/each}}
</ul>
</div>
</body>
<template name="task">
<li>{{text}}</li>
</template>然后,在simple-todos.js文件中放置以下JavaScript:
// simple-todos.js
Tasks = new Mongo.Collection("tasks");
if (Meteor.isClient) {
// This code only runs on the client
Template.body.helpers({
tasks: function () {
return Tasks.find({});
}
});
}此时,该示例的工作原理与预期完全相同。然而,当我在文档中穿插时,以及在web上查看其他示例时,我注意到了稍微不同的语法:使用Template.myTemplate而不是Template.body.。
因此,出于好奇,我修改了我的JavaScript文件如下:
Template.task.helpers({ ...而不是:
Template.body.helpers({ ...但是,当我现在运行应用程序时,客户端不会显示来自集合的数据。我不会收到任何关于未定义类型的错误,就像我在JavaScript中拼写模板名时所做的那样,因此它似乎正确地解析了模板。但是为什么它不被使用或者渲染呢?
更进一步:什么时候使用Template.myTemplate合适,什么时候使用Template.body合适?
发布于 2015-04-29 15:34:00
帮助代码只适用于它附加的模板。
因此,适用于Template.task的代码将只应用于名为“任务”的模板。
Template.body就像一个一次性的存在,因为如果它不存在就会很奇怪,这是一种专门针对<body>的方法,尽管从技术上讲,没有一个名为"body“的模板。
那么,到底发生了什么:
你的逻辑是:
在父模板中,对于我们找到的每个任务,呈现子模板“任务”的一个实例。
如果您将助手从body更改为task,则不会得到任何输出,除非您模仿已经发生的模式:
<template name="task">
{{#each tasks}}
do something
{{/each}}
</template>发布于 2016-06-13 05:09:14
这是因为<body>是父模板,您应该这样对待它:
<template="body>stuff that normally goes in an HTML body here</template>
当您移除主体的帮助程序时,就不会显示任何数据,因为帮助程序将数据传递到模板中。没有模板的助手,即身体,你就没有数据。
https://stackoverflow.com/questions/29947563
复制相似问题