例如我有一个列表,其中包含标题,正文,页脚和正文
所以我创建了这样的东西
<template name="List">
{{> ListHeader}}
{{> ListBody data}}
{{> ListFooter}}
</template>
<template name="ListBody">
<div class="list-body">
{{#each items}}
{{> ListItem data}}
{{/each}}
</div>
</template>
在ListItem中,我将显示播放一些动作按钮,例如根据某些初始化数据进行编辑/删除。
所以它会变得非常复杂。意思是,我必须在创建List
时定义它:
{{> List showEdit=true showDelete=true}}
然后在Template.List.helpers
中,再次定义showEdit
并将其传递给ListBody
Template.List.helpers({
showEdit: return this.showEdit:
})
{{> ListBody showEdit=showEdit showDelete=true}}
再次在ListBody中定义showEdit并将其传递给ListItem
Template.ListBody.helpers({
showEdit: return this.showEdit:
})
{{> ListItem showEdit=showEdit showDelete=true}}
所以我认为我做错了什么。也许我不应该创建这么多模板? 把它们放在一个地方?
我应该何时创建模板?什么是最佳做法?
答案 0 :(得分:0)
正如您已经表明的那样,单独的模板可能具有不同的数据上下文,这可能令人困惑/混乱。但是,在许多情况下,这是可取的,可以使您的代码更易于维护和更易读。
如你的例子所示:
{{#each items}}
{{> listItem}}
{{/each}}
在这种情况下,传递给listItem
的数据上下文会自动为数组中的每个项目设置。 (注意:您无需通过data
来执行此操作。)因此,使用新模板是有道理的。
使用单独模板的另一个原因是可重用性。随着项目的发展,这变得越来越重要,并且可以尝试提前考虑可能在其他地方重用的元素。
如您所示,您可以在调用时将数据传递到模板中。这既不好也不坏但是我会谨慎地做太多,因为这可能会导致过于复杂的事情。一般来说,你需要干净,模块化的模板,当你看到它们时是有意义的,不要让你四处寻找它们为什么没有做你期望的事情!
为此,请查看Template level subscriptions和Reactive variables。这些可以将模板转换为功能强大的模块化组件。我说的是经验,当我说你会为了养成以后以这种方式构建模板的习惯而感谢自己。
最后,解决这个问题的最好方法是玩一下并浏览其他项目,看看他们做了什么。警告:随着Meteor的发展,模板结构的最佳实践已经发生了变化,因此网上的一些建议可能无法利用更新,更好的做事方式。
答案 1 :(得分:-1)
这只是个人偏好。我不认为创建尽可能多的模板存在问题。为什么你写的是你认为自己做错了什么?