【问题标题】:Template fails if JSON property names contains full stop如果 JSON 属性名称包含句号,则模板失败
【发布时间】:2015-12-07 17:19:24
【问题描述】:

我正在使用 jsRender 呈现模板,但是我的 JSON 数据属性名称包含句号。

在网上举个简单的例子就可以了:

http://jsfiddle.net/mythical/4rtTy/

属性名称中的句号不再起作用:

http://jsfiddle.net/zLbw8rLL/

我需要使用什么语法/技术来允许 jsRender 获取这些属性?

var data = {
    people: [{
        "full.name": 'Dan Wahlin',
        shirtColor: 'white'
    }]
};


{{for people}}
<li>{{:full.name}} likes to wear {{:shirtColor}} shirts</li>
{{/for}}

【问题讨论】:

  • name 是 full 当你像这样命名它时的一个属性。使用您的语法,“完整”必须是它自己的对象。

标签: javascript json jsrender


【解决方案1】:

就像在 Javascript 中您可以编写 data.keydata['key'] 一样,您实际上可以使用语法 #data['someKey'] 让 JsRender 访问像 "full.name" 这样的属性名称 - 因为 #data 是当前数据项。

所以在你的情况下你可以写:

{{for people}}
    <li>{{:#data['full.name']}} likes to wear {{:shirtColor}} shirts</li>
{{/for}} 

这是你更新的小提琴:http://jsfiddle.net/BorisMoore/zLbw8rLL/1/

【讨论】:

    【解决方案2】:

    你有这个 JSON:

    var data = {
        people: [{
            "full.name": 'Dan Wahlin',
            shirtColor: 'white'
        }]
    };
    

    还有这个模板

    {{for people}}
    <li>{{:full.name}} likes to wear {{:shirtColor}} shirts</li>
    {{/for}}
    

    这是不正确的,因为 jsRender 尝试在这个 json 结构上获取值:

    var data = {
        people: [
            {
            "full": { "name":'Dan Wahlin'},
            shirtColor: 'white'},
        {
            "full": { "name":'John Papa' },
            shirtColor: 'black'},
        {
            "full": { name: 'Scott Guthrie'},
            shirtColor: 'red'}
        ]
    };
    

    参考:https://www.jsviews.com/#assigntag 示例:{{:data.paths}}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 2012-03-21
      • 2017-09-15
      • 2020-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多