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

时间:2014-05-09 18:28:25

标签: javascript json swig-template

使用swig模板和预先存在的json数据(遗憾的是,这些数据无法更改)我在变量连字时渲染数据时遇到问题。发现可以使用括号表示法来处理这种情况,如the docs中所述,但出于某种原因,我无法达到预期的结果。我知道其他模板语言,但我热衷于使用swig来提高性能和其他好处。

非常感谢任何见解。

测试用例文件:

layout.swigtmpl

<body>
  {% block content %}{% endblock %}
</body>

index.swig

{% extends 'layout.swigtmpl' %}
{% block content %}
  <div>
      <p>{{ targetdiv }}</p> // Works
      <p>{{ ['target-div'] }}</p> // Not rendering
      <p>{{ json['target-div'] }}</p> // Not rendering when assigned to an obj
  </div>
{% endblock %}

index.json

{
  "targetdiv": "lorem ipsum",
  "target-div": "lorem ipsum"
}

在布局文件中,将json数据分配给对象进行测试,但没有爱。

$(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;
    })();
});

文档: http://paularmstrong.github.io/swig/docs/#variables

1 个答案:

答案 0 :(得分:1)

不要将index.json的内容作为整个locals对象传递,只需将数据放在一个更深的关键位置,以便您可以使用括号表示法...

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

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