The bug source code is here .
假设我正在使用普通的 {{#each}}
在 Meteor 中循环遍历一个数组环形。每个数组元素都是一个字符串,我每一步都使用 {{this}}
输出字符串.到现在为止还挺好!如果我使用 Handlebars 助手检查 typeof
为 this
我会得到string
.甜的!一切都是应该的。
但是如果我添加一个 {{#if something }}
-helper 里面 {{#each}}
(something
只返回 true 并因此继续运行并输出 {{this}}
)该字符串在 HTML 中看起来仍然不错,但它现在是 object
在 typeof
查看!
这是 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/