当我尝试在纯HTML文本区域中使用Handlebars ForEach循环时,我遇到了一些意想不到的行为。
首先让我告诉你我的代码:
我的template.html:
<template name="test">
<textarea>
{{#each array}}
{{this}}
{{/each}}
</textarea>
</template>
我的template.js:
Template.test.array = function(){
return ["String1", "String2", "String3"];
}
问题:
我实际上期望一些看起来像这样的输出:
String1
String2
String3
相反,我得到了这个:
<!--data:46XrgsL9aX8aCa3Ek-->
<!--data:tu6FiCxRraSLoh2w9-->
<!--data:5h3PkyB66dHw4zrWF-->
作为一种解决方法,我使用了Handlebars助手并使用jQuery操纵了textarea的值,这非常有效。
我仍想对此案做一些澄清:
感谢每一个小小的帮助!
答案 0 :(得分:1)
这些字符串看起来像Spark landmarks。这很奇怪,但可能会在下一个Meteor版本中重写渲染引擎时修复。
这可能与字符串文字作为上下文传递给帮助程序时的问题有关;它变成了一个对象。
返回字符串文字的一种方法是编写帮助程序。而不是{{this}}
,请写{{printString}}
,然后定义
Template.test.printString = function() { return "" + this; }
答案 1 :(得分:0)
嗯,这应该有效!如果在安德鲁的建议之后仍然没有,请尝试以下方法:
1)将数据移出帮助者:
var array = ["String1", "String2", "String3"];
Template.test.array = function(){
return array;
};
2)将数据条目包装在对象中,作为解决方法:
Template.test.array = function(){
return [{label: "String1"}, {label: "String2"}, {label: "String3"}];
};
{{#each array}}
{{label}}
{{/each}}