【问题标题】:JsViews / JsRender table rendering with GroupBy an attribute/propertyJsViews / JsRender 使用 GroupBy 属性/属性渲染表格
【发布时间】:2021-01-08 12:26:18
【问题描述】:

我正在使用 JsViews 来设计一个模板。 但是我想知道我们是否可以根据其字符串值对属性进行分组?

JSON 示例:

"ItemDetails": [
    {
        "Amount": 2000,
        "Name": "Horror Book",
    },
    {
        "Amount": 3500,
        "Name": "Horror Book",
    },
    {
        "Amount": 1000,
        "Name": "Children Book",
    },
],

当前代码正在概述每个项目,即使它具有相同的名称。

{{for ItemDetails}}
{{if Amount}}
            <row>
                <col>{{>Name}}</col>
                <col>{{>Amount}}</col>
            </row>
{{/if}}
{{/for}}

我希望它有这样的结果:

恐怖书 5500

儿童读物 1000

【问题讨论】:

    标签: javascript jsrender jsviews


    【解决方案1】:

    JsRender/JsViews {{for}}{{props}} 标签内置支持排序、过滤等,但没有内置 groupBy 功能。但是您可以按照与grid with ~total() 示例类似的技术轻松创建一个。

    这是一种使用辅助函数的方法:

    <table><tbody>
      {{for ItemDetails sort="Name"}}
        {{if ~groupBy("Name", "Amount")}}
          <tr>
            <td>{{>Name}}</td>
            <td>{{>~total()}}</td>
          </tr>
        {{/if}}
      {{/for}}
    </tbody></table>
    

    https://jsfiddle.net/BorisMoore/nx3atd1q/

    这是一个使用过滤器功能的替代版本{{for}}

    <table><tbody>
      {{for ItemDetails sort="Name" filter=~groupBy groupTotal="Amount"}}
        <tr>
          <td>{{>Name}}</td>
          <td>{{:~total()}}</td>
        </tr>
      {{/for}}
    </tbody></table>
    

    https://jsfiddle.net/BorisMoore/o4pt3brq/

    【讨论】:

    • 谢谢。虽然你能解释一下this.datathis.parent.data有什么区别吗?
    • 对于~groupBy("Name", "Amount")this 指针就是视图。见jsviews.com/#viewobject@access。在这里,我们处于{{for}} 循环中,所以this 是“项目视图”,this.data 是项目。 this.parent 是父视图(这里是“数组视图”),this.parent.data 是项目数组。请参阅jsviews.com/#views,了解视图层次结构。
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    相关资源
    最近更新 更多