在 Meteor 中的字符串数组上使用 Handlebars #each 进行迭代
Posted
技术标签:
【中文标题】在 Meteor 中的字符串数组上使用 Handlebars #each 进行迭代【英文标题】:Iterating with Handlebars #each over an array of strings in Meteor 【发布时间】:2013-12-30 14:22:54 【问题描述】:我有一个 userId 字符串数组,并使用 #each 在模板中进行迭代。但是,#each 似乎想要一个对象并将每个字符串转换为和对象,如下所示:
String 0: "T", 1: "e", 2: "2", 3: "s", 4: "y", 5: "D", 6: "g", 7: "G", 8: "d", 9: "K", 10: "e", 11: "i", 12: "i", 13: "Q", 14: "S", 15: "i", 16: "W"
很烦人。任何想法如何避免这个问题?
谢谢
【问题讨论】:
为什么不只遍历用户对象? 问题在于 javascript 希望this
成为一个对象。
【参考方案1】:
例如,显示数组中的项目列表:
// input to template
const shopping_list = [
'Apples',
'Oranges',
'Bread',
'Peanut Butter'
];
// template.hbs
<ul>
#each shopping_list
<li>this</li>
/each
</ul>
预期结果:
苹果 橙子 面包 花生酱【讨论】:
【参考方案2】:我遇到了同样的问题,并且
this.toString()
解决了这个问题,但作为 Meteor 的新手,我很好奇为什么会发生这种情况,以及这是否是问题的可接受解决方案。
数据
client
exampleProerty: value,
projectManagers: [
userId,
userId
],
examleTwo: value
模板
#each projectManagers
> userTemplate
/each
模板助手
Template.userTemplate.helpers(
user: function()
var id = this.toString();
var user = Meteor.users.findOne(_id: id);
return user;
);
否则,希望这对其他人有所帮助。
【讨论】:
这不是一个好的答案!您正在从视图中查询数据库,为您的存储添加了额外的依赖项。尝试在开始渲染之前获取所有信息。【参考方案3】:怎么样
this.toString()
可能比String(this)
更健壮。
【讨论】:
【参考方案4】:这似乎有效:
String(this)
不得不这样做实在是太不优雅了……
【讨论】:
另外,请记住,使用此构造函数,您不会得到“真正的”字符串,而是字符串对象。它们的行为大部分相同,但一些常见的假设被打破了。例如typeof "asdf" === "string"
,但typeof String("asdf") === "object"
。
我刚刚检查了上述声明,在当前的 Firefox 中似乎是 typeof String("asdf") === "string"
。所以这个问题取决于浏览器——调试起来更有趣。以上是关于在 Meteor 中的字符串数组上使用 Handlebars #each 进行迭代的主要内容,如果未能解决你的问题,请参考以下文章
Meteor - #每个数组的迭代,在每个第 n 项之后插入另一个 HTML 元素
Meteor / MongoDB - 如何证明数组中的任何项目是不是等于特定值,而不是在“真”的情况下从另一个数组中提取项目?