如何在脚本标记字符串中嵌入变量?

我刚开始使用胡子,而且我喜欢它,但这让我感到困惑。

我正在使用GitHub gist API来实现我的要点,我想要做的一部分就是将嵌入功能添加到我的页面中。 问题是胡子似乎不想与我的动态脚本标记有任何关系。

例如,这工作正常:

<div class="gist-detail">
    {{id}} <!-- This produces a valid Gist ID -->
</div>

另外,这个工作非常完美:

<div class="gist-detail">
    <script src='http://gist.github.com/1.js'></script> <!-- Produces the correct embed markup with Gist ID #1 -->
</div>    

如果我试图将它们拉到一起,那么事情就会变得非常糟糕:

<div class="gist-detail">
    <script src='http://gist.github.com/{{id}}.js'></script> <!-- Blows up! -->
</div>  

Chrome Inspector显示了这一点:

GET https://gist.github.com/%7B%7Bid%7D%7D.js 404 (Not Found)

...对我来说,看起来有些东西对于escapes或whatnot来说很奇怪,所以我切换到了原始语法:

<div class="gist-detail">
    <script src='http://gist.github.com/{{{id}}}.js'></script> <!-- Blows again! -->
</div>  

我在Inspector中得到了相同的结果:

GET https://gist.github.com/%7B%7B%7Bid%7D%7D%7D.js 404 (Not Found)

我如何获得嵌入脚本标记的正确值?

编辑

我正在注入模板,如下所示(在document.ready

function LoadGists() {
    var gistApi = "https://api.github.com/users/<myuser>/gists";

    $.getJSON(gistApi, function (data) {

        var html, template;
        template = $('#mustache_gist').html();

        html = Mustache.to_html(template, {gists: data}).replace(/^s*/mg, '');
        $('.gist').html(html);
    });

}

实际上模板是在ruby部分内部的,但它被包装在一个div中(不是脚本标签,是一个问题?)(隐藏):

<div id="mustache_gist" style="display: none;">

    {{#gists}}
        <!-- see above -->
    {{/gists}}

</div>

我假设div是可以的,而不是script因为在任何情况下,我都拉.html() 。 这是一个糟糕的假设吗?


为避免Mustache中的自动转义,请使用{{{token}}}而不是{{token}}。


它看起来像你的模板是在HTML中,并试图检索模板使用html()结果在URL前转义模板被返回。 尝试将模板放在<script type="text/html">标记中。

当您将模板嵌入HTML元素(除了更多HTML元素作为子元素)之外,它可能会被HTML浏览器处理。 可能会发生逃逸。 通过使用带有非脚本内容类型的<script>标签,基本上告诉浏览器不要触摸您的模板。


看起来你的脚本正在被请求,Mustache有机会更新src属性。 你想要做的是定义模板,使其不被解析为DOM的一部分。 常用的方法是在<textarea>标签内定义模板。 这将保留格式并防止字符转义。

<textarea id="gist-detail-template" style="display:none">
  <script src='http://gist.github.com/{{id}}.js'></script>
</textarea>

现在,要实例化模板:

var template = $('#gist-detail-template').val();
var html = Mustache.to_html(template, yourTemplateData);

以下是一个官方示例:http://mustache.github.com/#demo

链接地址: http://www.djcxy.com/p/10405.html

上一篇: How do I embed a variable in a script tag string?

下一篇: Eclipse debugger "jumps" skipping important code