何时创建模板?

时间:2015-08-30 06:32:34

标签: meteor

例如我有一个列表,其中包含标题,正文,页脚和正文

所以我创建了这样的东西

<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}}

所以我认为我做错了什么。也许我不应该创建这么多模板? 把它们放在一个地方?

我应该何时创建模板?什么是最佳做法?

2 个答案:

答案 0 :(得分:0)

正如您已经表明的那样,单独的模板可能具有不同的数据上下文,这可能令人困惑/混乱。但是,在许多情况下,这是可取的,可以使您的代码更易于维护和更易读。

如你的例子所示:

{{#each items}}
  {{> listItem}}
{{/each}}

在这种情况下,传递给listItem的数据上下文会自动为数组中的每个项目设置。 (注意:您无需通过data来执行此操作。)因此,使用新模板是有道理的。

使用单独模板的另一个原因是可重用性。随着项目的发展,这变得越来越重要,并且可以尝试提前考虑可能在其他地方重用的元素。

如您所示,您可以在调用时将数据传递到模板中。这既不好也不坏但是我会谨慎地做太多,因为这可能会导致过于复杂的事情。一般来说,你需要干净,模块化的模板,当你看到它们时是有意义的,不要让你四处寻找它们为什么没有做你期望的事情!

为此,请查看Template level subscriptionsReactive variables。这些可以将模板转换为功能强大的模块化组件。我说的是经验,当我说你会为了养成以后以这种方式构建模板的习惯而感谢自己。

最后,解决这个问题的最好方法是玩一下并浏览其他项目,看看他们做了什么。警告:随着Meteor的发展,模板结构的最佳实践已经发生了变化,因此网上的一些建议可能无法利用更新,更好的做事方式。

答案 1 :(得分:-1)

这只是个人偏好。我不认为创建尽可能多的模板存在问题。为什么你写的是你认为自己做错了什么?