【问题标题】:JsRender/ JsViews: how to loop a nested json?JsRender/ JsViews:如何循环嵌套的 json?
【发布时间】:2014-01-20 09:15:03
【问题描述】:

如何使用 jsrender/jsviews循环像下面这样的嵌套 json?

var data = {  
    nested: {
        page: {
            type: "X",
            items: {
                "0":{"title":"page - hello"},
                "1":{"title":"page - world"}
            }
        },
        post: {
            type: "Y",
            items: {
                "0":{"title":"post - hello"},
                "1":{"title":"post - world"}
            }
        }  
    }

};

模板,

{{for nested}}
<div>
    <h1>Type: {{ :type }}</h1>
    {{for items}}
    <p>Title:  {{:title}} </p> 
    {{/for}}
</div>
{{/for}}

结果,

Type: {{ :type }}

我追求的是什么,

Type: X
Title - page - hello
Title - page - World

Type: Y
Title: post - hello
Title: post - World

【问题讨论】:

    标签: jquery json jsrender jsviews


    【解决方案1】:

    更新回复:

    JsRender 和 JsViews 有一个 {{props}} 标签用于遍历字段,记录在 here

    对于上面请求的示例数据和输出,您可以使用以下模板:

    <script id="myTmpl" type="text/x-jsrender">
    
    {{props nested}}
      <div>
        <h1>Type: {{:prop.type}}</h1>
        {{props prop.items}}
          <p>Title: {{:prop.title}}</p>
        {{/props}}
      </div>
    {{/props}}
    
    </script>
    

    还有如下代码:

    var myTmpl = $.templates("#myTmpl");
    
    var data = {  
      nested: {
        page: {
          type: "X",
          items: {
            "0":{"title":"page - hello"},
            "1":{"title":"page - world"}
          }
        },
        post: {
          type: "Y",
          items: {
              "0":{"title":"post - hello"},
              "1":{"title":"post - world"}
          }
        }
      }
    };
    
    var html = myTmpl.render(data);
    

    这里是jsfiddle

    【讨论】:

    • 谢谢。请问-#data{{props #data}}...{{/prop}} 中是什么意思?
    • #data 是当前数据项(或数据上下文,如果您愿意的话)。见jsviews.com/#assigntag。事实上#data#view.data 的缩写,#view 是当前的“视图”。例如,请参阅此示例:jsviews.com/#samples/jsr/paths
    【解决方案2】:

    我认为您遇到的问题是您在数据中声明了一个对象而不是数组。用下面的数据试试。

      var data = {  
          nested: {
            {
                type: "X",
                items: {
                    "0":{"title":"page - hello"},
                    "1":{"title":"page - world"}
                }
            },
            {
                type: "Y",
                items: {
                    "0":{"title":"post - hello"},
                    "1":{"title":"post - world"}
                }
            }  
        }
    
      };
    

    这种嵌套方式是一个数组,for 应该能够循环它。

    【讨论】:

    • 那么我可以在json中循环一个对象吗??
    • 快速阅读文档表明您只能使用 for 循环遍历数组。 jsviews.com/#fortag 在所有示例代码中,他们声明对象的 json 数组并且只迭代数组。
    • 谢谢。那么我应该使用什么标签来循环一个对象呢?
    • 抱歉,我看不到任何会遍历序列化对象属性的标签。最简单的事情可能是重塑您的数据,然后应用模板。您可以通过淡化对象来实现此目的,将您感兴趣的属性添加到数组中,然后序列化数组并将其用作数据。不确定这是否是正确的方法。我不是 json 专家。
    • @SzabV 我已经 DV 了这个答案,不是作为攻击,而是因为根本不需要改变数据结构。公认的答案证明了这一点。
    猜你喜欢
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2020-05-13
    • 1970-01-01
    相关资源
    最近更新 更多