Kri*_*r K 5 handlebars.js meteor
假设我使用普通{{#each}} 循环在Meteor中循环一个数组.每个数组元素都是一个字符串,我每步使用输出字符串{{this}}.到现在为止还挺好!如果我使用一个车把辅助检查typeof为this我去拿string.甜!一切都应该如此.
但是,如果我添加{{#if something }}-helper内{{#each}}(在something刚刚返回true,从而不断去和输出{{this}})的字符串仍然会看在HTML不错,但现在的是object在typeof检查!
这非常烦人,因为(typeof someVarINeedToTest === 'string')我的所有代码现在都依赖于它将返回false.
难道我做错了什么?
或者这是一个真正的错误?
如果是这样的话:它是特定于Meteor还是Handlebars特有的bug?
谢谢!
哦:源链接再次.只需拉动并运行meteor并查看浏览器控制台即可.
这是因为this变量应该始终是JavaScript中的一个对象,所以当someFunction.apply(someContext);由把手调用时,JavaScript会someContext变成一个对象,无论它起始于什么.在这里查看示例:http://jsfiddle.net/SyKSE/1/
(在这种情况下,someFunction表示模板中{{#if}}声明的部分.)
一个简单的(虽然很丑陋)解决方法是始终将数据作为对象传递,所以
['this', 'is', 'an', 'array', 'that', 'we\'re', 'looping', 'through'];
Run Code Online (Sandbox Code Playgroud)
变为:
[{val: 'this'}, {val: 'is'}, {val: 'an'}, {val: 'array'}, {val: 'that'}, {val: 'we\'re'}, {val: 'looping'}, {val: 'through'}];
Run Code Online (Sandbox Code Playgroud)
然后你会改变你的模板来val代替this