Javascript 在swig模板中访问连字符json变量

Javascript 在swig模板中访问连字符json变量,javascript,json,swig-template,Javascript,Json,Swig Template,使用swig模板和预先存在的json数据(不幸的是,这些数据无法更改)时,当变量被连字符连接时,我在呈现数据时遇到了问题。发现这种情况可以通过使用括号符号来处理,如中所述,但由于某些原因,我无法达到预期的结果。我知道其他模板语言,但我热衷于使用swig来提高性能和其他好处 非常感谢您的任何见解 测试用例文件: layout.swigtmpl <body> {% block content %}{% endblock %} </body> 在布局文件中,将json数据

使用swig模板和预先存在的json数据(不幸的是,这些数据无法更改)时,当变量被连字符连接时,我在呈现数据时遇到了问题。发现这种情况可以通过使用括号符号来处理,如中所述,但由于某些原因,我无法达到预期的结果。我知道其他模板语言,但我热衷于使用swig来提高性能和其他好处

非常感谢您的任何见解

测试用例文件:

layout.swigtmpl

<body>
  {% block content %}{% endblock %}
</body>
在布局文件中,将json数据分配给对象进行测试,但没有love

$(function() {
    var json = (function () {
        var json = null;
        $.ajax({
            'async': false,
            'global': false,
            'url': 'index.json',
            'dataType': "json",
            'success': function(data) {
                json = data;
            }
        });
        console.log("json = " + json['target-div']); // Works fine in log
        return json;
    })();
});
文件:

不要将
index.json
的内容作为整个
locals
对象传递,只需将数据放在更深一层的键上,这样就可以使用括号表示法

swig.render('index.swig', { locals: { data: indexjson }});

{{ data['target-div'] }}

您确定您的JSON对象存在于index.swig的上下文中吗?看起来您在JSON对象的上下文之外获得了
targetdiv
的值。根据这个逻辑,您应该得到如下的
target div
值:
{{{target div}}

,这当然是无效的语法。相当确定它确实存在于相同的上下文中。实际上,可以忽略ajax测试。我只是添加了它作为参考。Thx Matthew,我稍后会制作一个plunker或fiddle并发布在这里。我相信这会让我们走出泥潭。非常感谢您的支持!Swig>*
$(function() {
    var json = (function () {
        var json = null;
        $.ajax({
            'async': false,
            'global': false,
            'url': 'index.json',
            'dataType': "json",
            'success': function(data) {
                json = data;
            }
        });
        console.log("json = " + json['target-div']); // Works fine in log
        return json;
    })();
});
swig.render('index.swig', { locals: { data: indexjson }});

{{ data['target-div'] }}