流星:重复使用具有不同数据的模板

时间:2013-03-19 13:54:23

标签: javascript coffeescript meteor handlebars.js

我有一些列出项目(日志行,用户)的模板,并在表格中相应地设置它们。现在我添加了一个“搜索”页面,它搜索不同项目类型的字符串并在一个页面上显示它们。在布局方面,我想重用原始模板,但显然需要搜索返回的数据。

如果不在HTML文件中复制模板本身,我该怎么做?

换句话说:如何使用子模板中顶级模板的实际数据。

小例子:

<template name="user_list">
{{#each user_list}}
</template>

<template name="users">
{{> user_list}}
</template>

<template name="search">
{{> user_list}}
{{> group_list}}
</template>

在.coffee:

 Template.users.user_list = ->
     [a,b,c,d]

 Template.search.user_list = ->
     [b,c]

也许这很简单,这表明我对Meteor的了解有多少。

2 个答案:

答案 0 :(得分:0)

只需将您要使用的模板放在{{#each}}语句中即可。然后,数组中的每个项都将成为该内部模板的上下文。

HTML文件

<template name="users">
    <ul>
    {{#each UserArr}}
        {{> userItem}}
    {{/each}}
    </ul>
</template>

<template name="userItem">
    <li><a href="/edituser/{{_id}}">{{username}}</a> {{profile.name}}</li>
</template>

JS文件

Template.users.UserArr = function()
{
    return Meteor.users.find({});
};

答案 1 :(得分:-1)

另一个解决方案是将您的请求放在Session属性中,并在查询用户时检查它是否存在。默认情况下,Session.get("userQuery")会返回undefined,但是一旦您在搜索字段中输入内容,就会使用Session.set("userQuery", {type: "something"})

进行更改

现在在coffeescript中你可以说:

Template.users.user_list = ->
   if(Session.get("userQuery"))
     [a,b,c,d]
   else
     [b,c]

或者使用MiniMongo查询,因为它更好: - )

好的一点是,你的HTML会重新呈现,因为它会对Session的内容产生反应。