我从数据库中获取了一个光标,并且使用{{#each}}辅助标记执行通常的“列出每个项目”。
HTML
{{#each item}}
<span class="label">{{this}}</span>
{{/each}}
JS
Template.name.helpers({
item: function() {
return Session.get('foo').items
},
});
但是,由于每个项目属于 n 类之一,我想a)确定它是哪一个,并且b)相应地更改span
类。
换句话说,类别的名称与我现在代替{{this}}
的字符串相结合,并存储在一个单独的集合中,例如
{
"_id": "whatnot"
"item": "item1",
"category": "bar"
}
目标是比较它们并确定与类别匹配的类:
{{#each item}}
<span class="[[what "category" does ‘this’ belong to?]]">{{this}}</span>
{{/each}}
如果这是不可能或不好的方法,我会感谢任何更好的架构技巧,因为我认为这可能是问题所在。谢谢!
答案 0 :(得分:1)
更简洁的方法是直接进入集合。
#each
在光标上这很好,因为现在而不是奇迹wtf {{this}}
在一个月内,你将拥有{{items}}
。其次,您将在数据上下文中拥有该类别,因此您可以为其编写帮助程序。例如,如果您希望所有bar
类别项目都具有baz
类:
return (this.category === 'bar') && 'baz'
答案 1 :(得分:1)
您可以与助手一起执行此操作:
HTML:
<template name="name">
{{#each item}}
{{> item}}
{{/each}}
</template>
<template name="item">
<span class="{{category}}">{{this}}</span>
</template>
JS
Template.name.helpers({
item: function(){
return Session.get('foo').items
}
});
Template.item.helpers({
category: function(){
return Categories.findOne({_id: this.categoryId}).category;
}
});
这假设您的 Items 集合通过名为 categoryId 的键链接到 Categories 集合 - 您的集合名称和键可能不同。它还假设您为可能的类别名称设置了css类。
你可能会想“哎呀,我每次显示一个项目时都要进行搜索?”答案是“是的,但是最小的确非常快,所以不要担心。”您在内存中搜索客户端,而不是通过网络搜索服务器到磁盘。
通常你的 item 助手会返回一个游标,例如Items.find(query)
,但看起来你正在执行查找并将其填充到其他地方的会话变量中。你或许可以摆脱这一额外的步骤。