Kendo UI 循环遍历 ListView 模板中 Json 中的集合

Posted

技术标签:

【中文标题】Kendo UI 循环遍历 ListView 模板中 Json 中的集合【英文标题】:Kendo UI loop through collection in Json within template for ListView 【发布时间】:2012-08-28 11:39:49 【问题描述】:

我试图在列表视图的 Kendo UI 模板中找出如何循环遍历每个对象中的集合以在页面上呈现信息。这是我正在使用的 json 示例:

"Data":["Title":"Malicious Acts","KeyPairs":"Key1":"12","Key2":"24",            "Title":"Enrollments","KeyPairs":"Key1":"12","Key2":"24","Title":"Customer Feedback","KeyPairs":"Key1":"12","Key2":"24","Title":"Questionable Accounts","KeyPairs":"Key1":"12","Key2":"24"],"Total":4,"AggregateResults":null,"Errors":null

我要呈现在模板中的密钥对项目,只是遇到了一些麻烦的了解如何。 P>

这里是来源:

<div id="subscriberFunctions">

    <script type="text/x-kendo-tmpl" id="template">
        <div class="subscriberFunction">
            <h3>$Title</h3>
           <!-- Display KeyPairs -->
        </div>
    </script>

    @(html.Kendo().ListView<SubscriberMenuFunction>()
        .Name("listView")
        .TagName("div")
        .ClientTemplateId("template")
        .DataSource(dataSource =>
        
            dataSource.Read(read => read.Action("SubscriberMenu", "ListView"));
        )
        .Selectable(selectable => selectable.Mode(ListViewSelectionMode.Single))

    )
</div>

我确定我只是想多了,这很简单,但不确定如何在模板中实现 foreach 循环以便 Kendo UI 识别它。

提前致谢!

【问题讨论】:

【参考方案1】:

您可以在 for 循环中使用计数器来执行此操作。这应该可以解决您的问题:

<script type="text/x-kendo-tmpl" id="template">
    <div class="subscriberFunction">
        <h3>$Title</h3>
        <!-- Display KeyPairs -->
        <ul>
            #for (var i=0,len=KeyPairs.length; i<len; i++)#
                <li>$ KeyPairs[i] </li>
            #  #
        </ul>
    </div>
</script>

【讨论】:

这是一种更好的方法,效果很好,并且不会在输出中带来额外的代码 sn-p。 我认为你在 "var i=0," 后面有错字,逗号应该是分号吧? ^ 我认为你在“应该是一个”之后有一个错字,“分号”应该是“分号”对吧? :P 我不知道为什么会有这么多赞成票。它打算在设置中声明 2 个变量,但不起作用,而且可读性不强 本来打算在设置中声明2个变量,所以逗号是正确的,但是这里的聊天显示它不是很可读【参考方案2】:

您可以在模板中包含任意 javascript 代码:

<script type="text/x-kendo-tmpl" id="template">
    <div class="subscriberFunction">
        <h3>$Title</h3>
       <!-- Display KeyPairs -->
         <ul>
         # for (var key in KeyPairs)  #
              <li>$ KeyPairs[key] </li>
         #  #
         </ul>
    </div>
</script>

【讨论】:

这得到了我的价值观,但带来了看起来像 javascript 代码的东西: • 52b1e4cc-5fef-4f5c-a0b5-f054b2cf6655 • function ()return b • function (a)var b=this, c,d,e=function()return b,f;o.fn.init.call(this);for(d in a)c=a[d],d.charAt(0)!="_ "&&(f=M.call(c),c=b.wrap(c,d,e)),b[d]=c;b.uid=n.guid() • 函数 (a)return this.hasOwnProperty(a)&&a!=="_events"&&typeof this[a]!==r&&a!=="uid" • function ()var a=,b,c;for(c in this) if(this.shouldSerialize(c))b=this[c];if(b instanceof R||b instanceof Q)b=b.toJSON();a[c]=breturn a ... KeyPairs 对这个例子来说是个坏名字吗? @mservais 你知道如何摆脱 javascript 吗?我也面临同样的困境。 对于像@mservais 这样有问题的人:尝试在 KeyPairs.toJSON() 中循环。【参考方案3】:

一旦您知道语法,就可以遍历集合。这基本上是斯坦斯用更清晰的语法回答。 如果您使用列表,则只需添加属性即可访问属性,例如,&lt;li&gt;#=KeyPairs[i].FooBar#&lt;/li&gt;

<script type="text/x-kendo-tmpl" id="template">
    <div class="subscriberFunction">
    <h3>#=Title#</h3>
    <ul>
        # for (var i = 0; i < KeyPairs.length; i++)  #
            <li>#=KeyPairs[i]#</li>
        #  #
    </ul>
</div>

【讨论】:

【参考方案4】:

这是另一种在客户端模板中循环集合的优雅方式

<script type="text/x-kendo-tmpl" id="template">
    <div class="subscriberFunction">
        <h3>$Title</h3>
          # var t=KeyPairs.join('<br>'); # 
          #=t #
    </div>
</script>

【讨论】:

以上是关于Kendo UI 循环遍历 ListView 模板中 Json 中的集合的主要内容,如果未能解决你的问题,请参考以下文章

Kendo UI 模板概述

TabStrip中的Kendo UI模板语法

Kendo UI 模板:无效模板错误

Kendo UI 数字格式无效的模板

Kendo UI Scheduler:如何创建自定义模板

可编辑的详细信息模板 Kendo UI 网格