假设我使用普通的{{#each}}
循环在Meteor中循环数组。每个数组元素都是一个字符串,我使用{{this}}
每一步输出字符串。到现在为止还挺好!如果我使用把手帮助器检查typeof
this
我将获得string
。甜!一切都是应有的。
但是如果我在{{#if something }}
内添加一个{{#each}}
- 帮助器(something
只返回true,从而继续运行并输出{{this}}
)字符串看起来仍然很好在HTML中,但它现在是object
检查中的typeof
!
这非常烦人,因为我的代码现在可能依赖的所有(typeof someVarINeedToTest === 'string')
都将返回false。
我做错了吗?
或者这是一个真正的错误吗?
如果是这样的话:它是特定于Meteor或Handlebars的错误吗?
谢谢!
哦:the source link again。只需拉动并运行meteor
,然后查看浏览器控制台。
答案 0 :(得分:5)
这是因为this
变量应始终是JavaScript中的对象,因此当手柄调用someFunction.apply(someContext);
时,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