流星把手{{#if}}将字符串转换为对象

Kri*_*r K 5 handlebars.js meteor

bug源代码在这里.

假设我使用普通{{#each}} 循环在Meteor中循环一个数组.每个数组元素都是一个字符串,我每步使用输出字符串{{this}}.到现在为止还挺好!如果我使用一个车把辅助检查typeofthis我去拿string.甜!一切都应该如此.

但是,如果我添加{{#if something }}-helper内{{#each}}(在something刚刚返回true,从而不断去和输出{{this}})的字符串仍然会看在HTML不错,但现在的是objecttypeof检查!

这非常烦人,因为(typeof someVarINeedToTest === 'string')我的所有代码现在都依赖于它将返回false.

难道我做错了什么?

或者这是一个真正的错误?

如果是这样的话:它是特定于Meteor还是Handlebars特有的bug?

谢谢!

哦:源链接再次.只需拉动并运行meteor并查看浏览器控制台即可.

Nat*_*dly 5

这是因为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