我试图使用1.11 beta 4加载一些远程模板,并且当ember-template-compiler尝试编译模板时遇到错误。它抛出" A块只能在HTML元素或其他块中使用"例外。我正在使用以下代码编译模板:
var compiledTemplate = Ember.Handlebars.compile(templateText);
有没有人见过这个?模板是:
<p{{#id}} id="{{id}}"{{/id}} data-name="{{name}}" class="flag {{#alert}}{{type}} {{type}}-input{{/alert}} {{styleClass}}{{^alert}} hide{{/alert}}">
<span{{#id}} id="{{alertSevId}}"{{/id}} class="alertSeverity icon">
{{#alert}}{{type}}{{/alert}}
</span>
<span{{#id}} id="{{alertMsgId}}"{{/id}} class="alertMessage">
{{#alert}}{{message}}{{/alert}}
</span>
</p>
答案 0 :(得分:6)
我正在学习Ember,今天我遇到了同样的错误信息"Error: A block may only be used inside an HTML element or another block."
然而,我正在使用Ember v1.10。
我正在编写一个教程,并注释掉了我的部分HTML,因此我可以尝试其他方法:
<script type="text/x-handlebars" data-template-name="logs">
<section>
<ul>
{{#each log in model}}
<li>{{log.name}}</li>
{{/each}}
</ul>
<!--<ul>-->
<!--{{#each dev in controller}}-->
<!--<li>{{dev}}</li>-->
<!--{{/each}}-->
<!--</ul>-->
<!--<button {{action "clickMe"}}Click me!</button>-->
<!--<p>{{renderedOn}}</p>-->
</section>
</script>
当我尝试查看新更改时,没有显示任何内容。我确信这是因为我添加了新的无序列表或者我对我的JavaScript所做的更改,但我的错误来源是注释掉的HTML。我删除了它,一切都按预期运行。
我更多地了解了这种情况,我观察到了:
那么,通过消除过程,我发现罪魁祸首正在评论每个帮助者:
<!--{{#each dev in controller}}-->
<!--{{/each}}-->
我知道这与你的设置并不完全相同,但希望它可以指出你正确的方向来解决你的问题。
答案 1 :(得分:3)
您正在尝试添加&#34;块&#34;表示为&#34;#&#34;在标签内。这是无效的。尝试删除&#34;#&#34;来自{{#id ...}}
答案 2 :(得分:1)
如果定义了html属性,似乎要有条件地设置它。要做到这一点,你可以翻译这个胡子:
<div {{#id}}id="{{id}}" {{/id}}>
...进入此Ember hbs模板(注意{{id}}周围缺少引号):
<div id={{id}}>
您将获得相同的结果:
已设置ID - <div id="foo">
尚未设置ID - <div >
避免这种不良后果 - <div id="">