基于服务器的DataTables+YADCF和基于AJAX的select2:选择选项将清除select2选择

基于服务器的DataTables+YADCF和基于AJAX的select2:选择选项将清除select2选择,datatables,yadcf,Datatables,Yadcf,设置: DataTables使用基于AJAX的分页远程数据 YADCF使用Select2,它使用AJAX调用获取选项 选择Select2选项将触发网格刷新并过滤所有内容 问题是: DataTables提取更新的行集后,YADCF立即重新运行其初始化例程,Select2将丢失其状态,即所选选项不再被选中,不再位于DOM中 这: 在grid重新加载select2控件重新初始化并丢失通过AJAX拉取的所有选项(包括所选选项)后变为: 在这种情况下,如何避免YADCF重新初始化 调试了一段时间后,我发

设置:

DataTables使用基于AJAX的分页远程数据 YADCF使用Select2,它使用AJAX调用获取选项 选择Select2选项将触发网格刷新并过滤所有内容 问题是:

DataTables提取更新的行集后,YADCF立即重新运行其初始化例程,Select2将丢失其状态,即所选选项不再被选中,不再位于DOM中

这:

在grid重新加载select2控件重新初始化并丢失通过AJAX拉取的所有选项(包括所选选项)后变为:

在这种情况下,如何避免YADCF重新初始化

调试了一段时间后,我发现函数appendFilters。。。从该YADCF行每次网格刷新后调用:

反过来,DataTables的draw事件会触发该事件

谢谢

编辑:

DataTables配置数组:

var dataTableConfig = {
    "autoWidth": false,
    "deferLoading": 220,
    "pageLength": 5,
    "searchDelay": 0,
    "searching": true,
    "placeholder": null,
    "ordering": true,
    "paging": true,
    "info": true,
    "columns": [
        {
            "name": "company",
            "data": {
                "_": "company",
                "filter": "company",
                "display": "company"
            },
            "visible": true,
            "searchable": true,
            "orderable": true,
            "className": "column_Company"
        }
    ],
    "showGlobalSearch": true,
    "enableColumnFilter": true,
    "columnFilterPosition": "table",
    "resetPaging": true,
    "select": {
        "style": "single"
    },
    "serverSide": true,
    "ajax": {
        "url": "/datasource/",
        "type": "post"
    }
};
YADCF INIT:


每次重新绘制网格后,YADCF重新初始化列过滤器的原因是什么?请发布dt和YADCF构造函数/init代码的相关代码,并解释select2是如何获取数据的-它是像其他过滤器一样从dt源获得的,还是使用自己的ajax源?更新。select2使用的正是这种方法:以前没有尝试过这种方法,我建议您了解如何强制select2从ajax源代码中提取数据,并在yadcf中添加所需的代码行,或者让我知道如何让它这样做。b、 t.w您可以提供select2所需的输入以及您的datatables数据源,如showcase上所述。我将详细介绍select2。但是为什么每次网格重画时都要重新初始化列过滤器?一次就足够了吗?每次网格重画后YADCF重新初始化列过滤器的原因是什么?请发布dt和YADCF构造函数的相关代码/init代码,并解释select2是如何获取数据的——它是像其他任何过滤器一样来自dt源,还是使用自己的ajax源?已更新。select2使用的正是这种方法:以前没有尝试过这种方法,我建议您了解如何强制select2从ajax源代码中提取数据,并在yadcf中添加所需的代码行,或者让我知道如何让它这样做。b、 t.w您可以提供select2所需的输入以及您的datatables数据源,如showcase上所述。我将详细介绍select2。但是,为什么要在每次重新绘制网格时重新初始化列过滤器呢?仅仅初始化一次还不够吗?
colCfg = [
    {
        "column_number": 2,
        "filter_type": "select",
        "data": [],
        "filter_default_label": "(select..)",
        "enable_auto_complete": false,
        "sort_as": "alpha",
        "sort_order": "asc",
        "filter_match_mode": "contains",
        "exclude_label": "exclude",
        "select_type": "select2",
        "select_type_options": {
            "width": "300",
            ajax: {
                url: '/datasource/',
                dataType: 'json',
                method: 'post',
                delay: 750,
                data: function (params) {
                    return {
                        q: params.term,
                        page: params.page
                    };
                },
                processResults: function (data, params) {
                    params.page = params.page || 1;
                    return {
                        results: data.results,
                        pagination: {
                            more: (params.page * 20) < data.total_count
                        }
                    };
                },
                cache: true
            },
            minimumInputLength: 1,
            templateResult: formatItem,
            templateSelection: formatItemSelection,
            escapeMarkup: function(v) {return v;}
        },
        "case_insensitive": true,
        "filter_delay": 500
    }
];
yadcf.init(dataTable, colCfg);