jquery:从没有html编码实体文本的文件加载html? (例如'{{>'用于Handlebars部分模板)

时间:2014-11-15 17:20:15

标签: jquery html templates handlebars.js partials

编辑:找到解决方案 另一个用户添加了一个解决方案(有效),但后来对其进行了编辑,所以我在这里添加我在其他地方看到的内容:

原始模板位于<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}}">{{&gt; datalabel}}</li>
    {{/Data}}
</ul>

请注意,从{{> datalabel}}方法读取时{{&gt; datalabel}}部分编码为.html()的方式。

在我看来,实体文本中的部分正在被编码。这打破了我的Handlebars方法。如何在加载

时阻止html编码

1 个答案:

答案 0 :(得分:0)

我找到了一种解决方法:编码然后解码source以提取正确的html文本。这样可以解决问题,并将{{&gt;解码回{{>。这是修复:

$.get(path,
    function(templates, textStatus, jqXhr) {
        var source = $(templates).filter(templateId).html();
        source = $('<div/>').html(source).text();

        var template = Handlebars.compile(source);