5

错误源代码在这里

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

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

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

难道我做错了什么?

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

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

谢谢!

哦:又是源链接。只需拉动并运行meteor并查看您的浏览器控制台。

4

1 回答 1

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

于 2013-11-14T20:49:10.383 回答