meteor Handlebars {{#if}} 将字符串变成对象

标签 meteor handlebars.js

The bug source code is here .

假设我正在使用普通的 {{#each}} 在 Meteor 中循环遍历一个数组环形。每个数组元素都是一个字符串,我每一步都使用 {{this}} 输出字符串.到现在为止还挺好!如果我使用 Handlebars 助手检查 typeofthis我会得到string .甜的!一切都是应该的。

但是如果我添加一个 {{#if something }} -helper 里面 {{#each}} (something 只返回 true 并因此继续运行并输出 {{this}} )该字符串在 HTML 中看起来仍然不错,但它现在是 objecttypeof查看!

这是 super 烦人的所有 (typeof someVarINeedToTest === 'string')我的代码可能取决于现在将返回 false。

难道我做错了什么?

或者这是一个实际的错误?

如果是这样:它是 Meteor 特定的还是 Handlebars 特定的错误?

谢谢!

哦:the source link again .拉动就跑 meteor并查看您的浏览器控制台。

最佳答案

这是因为 this变量应该始终是 JavaScript 中的对象,所以当 someFunction.apply(someContext);被 Handlebars 调用,JavaScript 变成 someContext变成一个对象,无论它以什么开始。在此处查看示例:http://jsfiddle.net/SyKSE/1/

(在本例中,someFunction 表示模板中位于 {{#if}} 语句中的部分。)

一个简单(虽然丑陋)的解决方法是始终将数据作为对象传入,因此

['this', 'is', 'an', 'array', 'that', 'we\'re', 'looping', 'through'];

变成:
[{val: 'this'}, {val: 'is'}, {val: 'an'}, {val: 'array'}, {val: 'that'}, {val: 'we\'re'}, {val: 'looping'}, {val: 'through'}];

然后您将更改模板以查看 val而不是 this

关于 meteor Handlebars {{#if}} 将字符串变成对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19982695/

相关文章:

node.js - 如何使用 Node.js + express 在 Handlebars 中循环遍历数组

javascript - 从下拉列表中选择后执行代码

node.js - meteor 错误 : EACCES: permission denied, rmdir 'build'

mysql - 使用 forEach() 和 Node.js 插入数据

ember.js - Handlebars helper 返回标记

html - Grunt/Assemble - 输出 html 缩小

javascript - 如何调试 Mustache js 模板?

javascript - 使用 Meteor.loginWithFacebook 时出现内部服务器错误

Accounts.onCreateUser 中的 Meteor Promise

Meteor:每个用户只允许一个客户端实例