首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据-包含年龄范围/YADCF累积过滤器的排序列(使用columnDefs )

数据-包含年龄范围/YADCF累积过滤器的排序列(使用columnDefs )
EN

Stack Overflow用户
提问于 2018-11-30 04:04:56
回答 1查看 310关注 0票数 1

我使用数据显示组、阶段和年龄(范围)。现在,包含年龄范围的列被排序为一个字符串,但我希望它能够对年龄范围进行排序。因此,10-12岁排在3-8岁之前,4-10岁排在4-8岁之前。

在此基础上,我使用YADCF来实现累积过滤,其思想是:

  1. 您可以看到完整的概述。
  2. 你选择你的年龄(范围)
  3. 阶段列表只应包含基于先前选择的项。
  4. 只显示与年龄范围和所选阶段相匹配的组。

问题1

如何实现年龄列的排序功能?尝试过各种不同的东西,但没有什么区别。

问题2

当将"cumulative_filtering“选项设置为true时,我得到一个JS错误"TypeError: t.split不是函数”,我猜这与data.Age.Min和data.Age.Max有关。

代码语言:javascript
复制
<label for="AgeFilter" class="sr-only">Age</label>
<div id="AgeFilter"></div>

<label for="PhaseFilter" class="sr-only">Phase</label>
<div id="PhaseFilter"></div>

<table id="Table">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Phase</th>
<th>Age</th>
</tr>
</thead>
</table>

JS

代码语言:javascript
复制
$(function(){
var DT = $('#Table').DataTable( {
    data: [{"Id":0,"Name":"Group 0","Phase":{"Id":1,"Name":"Phase 1"},"Age":{"Min":3,"Max":8}},{"Id":1,"Name":"Group 1","Phase":{"Id":1,"Name":"Phase 1"},"Age":{"Min":3,"Max":8}},{"Id":2,"Name":"Group 2","Phase":{"Id":1,"Name":"Phase 1"},"Age":{"Min":3,"Max":8}},{"Id":3,"Name":"Group 3","Phase":{"Id":1,"Name":"Phase 1"},"Age":{"Min":3,"Max":8}},{"Id":4,"Name":"Group 4","Phase":{"Id":1,"Name":"Phase 1"},"Age":{"Min":3,"Max":8}},{"Id":5,"Name":"Group 5","Phase":{"Id":1,"Name":"Phase 1"},"Age":{"Min":4,"Max":8}},{"Id":6,"Name":"Group 6","Phase":{"Id":1,"Name":"Phase 1"},"Age":{"Min":4,"Max":8}},{"Id":7,"Name":"Group 7","Phase":{"Id":1,"Name":"Phase 1"},"Age":{"Min":4,"Max":8}},{"Id":8,"Name":"Group 8","Phase":{"Id":1,"Name":"Phase 1"},"Age":{"Min":4,"Max":8}},{"Id":9,"Name":"Group 9","Phase":{"Id":1,"Name":"Phase 1"},"Age":{"Min":4,"Max":8}},{"Id":10,"Name":"Group 10","Phase":{"Id":1,"Name":"Phase 1"},"Age":{"Min":4,"Max":8}},{"Id":11,"Name":"Group 11","Phase":{"Id":2,"Name":"Phase 2"},"Age":{"Min":4,"Max":10}},{"Id":12,"Name":"Group 12","Phase":{"Id":2,"Name":"Phase 2"},"Age":{"Min":4,"Max":10}},{"Id":13,"Name":"Group 13","Phase":{"Id":2,"Name":"Phase 2"},"Age":{"Min":4,"Max":10}},{"Id":14,"Name":"Group 14","Phase":{"Id":2,"Name":"Phase 2"},"Age":{"Min":4,"Max":10}},{"Id":15,"Name":"Group 15","Phase":{"Id":2,"Name":"Phase 2"},"Age":{"Min":4,"Max":10}},{"Id":16,"Name":"Group 16","Phase":{"Id":2,"Name":"Phase 2"},"Age":{"Min":10,"Max":12}},{"Id":17,"Name":"Group 17","Phase":{"Id":2,"Name":"Phase 2"},"Age":{"Min":10,"Max":12}},{"Id":18,"Name":"Group 18","Phase":{"Id":2,"Name":"Phase 2"},"Age":{"Min":10,"Max":12}},{"Id":19,"Name":"Group 19","Phase":{"Id":2,"Name":"Phase 2"},"Age":{"Min":10,"Max":12}}],
    autoWidth: false,
    pageLength: -1,
    order: [[ 2, "asc" ], [ 3, "asc" ]],
    columnDefs: [
        { targets: 0, data: "Id" }, 
        { targets: 1, data: 'Name' },
        { targets: 2, data: function ( data, type, val, meta ) {
            if (type === 'display') {
                return data.Phase.Name;

            }else if (type === 'filter') {
                return data.Phase.Name;
            }
            // 'sort', 'type' and undefined all just use the integer
            return data.Phase.Id;
        } },
        { targets: 3, data: function ( data, type, val, meta ) {
            if (type === 'display') {
                if(data.Age.Min == data.Age.Max) return data.Age.Max;
                return data.Age.Min + '-' + data.Age.Max;

            }else if (type === 'filter') {
                return data.Age.Min + '-' + data.Age.Max;
            }
            // 'sort', 'type' and undefined all just use the integer
            return [data.Age.Min,data.Age.Max];
        } }
    ]
});
yadcf.init(DT, [
    {
        column_number : 2, 
        filter_container_id: 'PhaseFilter', 
        filter_default_label: 'Phase', 
        //filter_reset_button_text: false, 
        filter_match_mode: 'exact', 
        style_class: 'form-control'
    },
    {
        column_number : 3, 
        filter_container_id: 'AgeFilter', 
        filter_default_label: 'Age', 
        //filter_reset_button_text: false, 
        filter_match_mode: 'exact', 
        style_class: 'form-control',
        sort_as: 'num'
    }
], {
 //  cumulative_filtering: true
});

});

JS Fiddle这里:https://jsfiddle.net/Webkungen/kmorw24f/2/

编辑

关于自定义排序函数,我尝试过:

代码语言:javascript
复制
sort_as_custom_func: function(one,two) {
    return (one < two);
},

问题是我似乎无法访问Age.Min和Age.Max,1和两个值仍然是字符串,即3-8,因此不知道如何比较这两个值。

EN

回答 1

Stack Overflow用户

发布于 2018-12-05 12:14:49

关于问题1,您应该实现自己的自定义排序函数sort_as_custom_func (读取文档)。

至于问题2,您需要将您的列设置为column_data_type: "rendered_html",,并实现column_data_render函数,在相关问题中阅读更多内容(尚未记录)

我是在这里为你实现的

如下所示

代码语言:javascript
复制
yadcf.init(DT, [
    {
        column_number : 2, 
        filter_container_id: 'PhaseFilter', 
        filter_default_label: 'Phase', 
        //filter_reset_button_text: false, 
        filter_match_mode: 'exact', 
        style_class: 'form-control',
        column_data_type: "rendered_html",
        column_data_render: function (data) {
            return data.Phase.Name;
        }
    },
    {
        column_number : 3, 
        filter_container_id: 'AgeFilter', 
        filter_default_label: 'Age', 
        //filter_reset_button_text: false, 
        filter_match_mode: 'exact', 
        style_class: 'form-control',
        sort_as: 'num',
        column_data_type: "rendered_html",
        column_data_render: function (data) {
            return data.Age.Min + '-' + data.Age.Max;
        }
    }
], {
   cumulative_filtering: true
});

});

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53551076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档