编辑:找到解决方案 另一个用户添加了一个解决方案(有效),但后来对其进行了编辑,所以我在这里添加我在其他地方看到的内容:
原始模板位于<div>
中,被视为text / html。我用<div>
替换了<script>
,一切都按预期工作:
<script id="template-id" type="text/x-handlebars-template">
原始发布
我将所有Handlebars模板都写在单独的html文件中。到目前为止,我已经使用以下内容加载模板的源代码并展开它们没有问题:
$.get(path,
function(templates, textStatus, jqXhr) {
var source = $(templates).filter(templateId).html();
var template = Handlebars.compile(source);
/* ... */
然后source
包含模板代码。它使用简单的模板精美地工作。我甚至开始使用partials为我的html实体添加属性:
<div class="pull-left label label-default tracking-item-data pointable"
item-id="{{ItemId}}"
data-id="{{Id}}"
title="{{> tooltip}}">
{{#if ExternalId}}{{ExternalId}}{{else}}Ignored{{/if}}
</div>
工作正常。
然而,现在我在实体的文本中添加了一个部分(不仅仅是作为一个属性)而且事情正在破碎。这是模板:
<ul class="list-unstyled list-inline">
{{#Data}}
<li title="{{> tooltip}}">{{> datalabel}}</li>
{{/Data}}
</ul>
当我在上面的javascript中加载source
时,它包含了这个而不是具有正确Handlebars部分语法的预期值:
<ul class="list-unstyled list-inline">
{{#Data}}
<li title="{{> tooltip}}">{{> datalabel}}</li>
{{/Data}}
</ul>
请注意,从{{> datalabel}}
方法读取时{{> datalabel}}
部分编码为.html()
的方式。
在我看来,实体文本中的部分正在被编码。这打破了我的Handlebars方法。如何在加载
时阻止html编码答案 0 :(得分:0)
我找到了一种解决方法:编码然后解码source
以提取正确的html文本。这样可以解决问题,并将{{>
解码回{{>
。这是修复:
$.get(path,
function(templates, textStatus, jqXhr) {
var source = $(templates).filter(templateId).html();
source = $('<div/>').html(source).text();
var template = Handlebars.compile(source);