在 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 / Mongo 返回子文档数组

Meteor - #每个数组的迭代,在每个第 n 项之后插入另一个 HTML 元素

Meteor JS如何从集合中的数组中获取特定对象?

Meteor / MongoDB - 如何证明数组中的任何项目是不是等于特定值,而不是在“真”的情况下从另一个数组中提取项目?

Meteor 集合获取返回空数组但已订阅

如何将所有 Meteor Mongo 集合名称检索为 Javascript 数组?