流星:使用不同数据重用模板

Meteor: Re-use template with different data

本文关键字:数据 流星      更新时间:2023-09-26

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

我怎么能做到这一点,而不复制模板本身在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的了解是多么的少。

只需将要使用的模板放入{{#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({});
};

另一个解决方案是将请求放在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将呈现,因为它是响应会话的内容。