当前位置: 首页 > 面试题库 >

数据表:自定义响应处理

鲁烨
2023-03-14
问题内容

我开始工作AngularJS,并DataTables和奇迹是否可以定制响应DataTables期待。当前对DataTables插件的期望是这样的:

{
    "draw": 1,
    "recordsTotal": 57,
    "recordsFiltered": 5,
    "data": [...]
}

在服务器端,API由 django-tastypie

服务器的响应是:

{
     meta: {
        limit: 20,
        next: null,
        offset: 0,
        previous: null,
        total_count: 2
     },

     objects: [...]
 }

因此,有没有一种方法可以调整Datatables插件以接受/映射此响应,或者我必须找到一种将期望的字段添加到api的方法

到目前为止,我已经做到了:

    var deptTable = angular.element('#deptManagementTable').DataTable({
        processing: true,
        serverSide: true,
        pagingType: "simple_numbers",
        ajax: {
            url: "/client/api/v1/departments/",
            data: function(d) {
                d.limit = d.length;
                d.offset = d.start;
                d.dept_name__icontains = d.search.value;
            },
            dataSrc: function(json) {
                for (var i=0, len=json.objects.length ; i<len ; i++) {
                    json.objects[i].DT_RowId = json.objects[i].dept_id;
                }
                return json.objects;
            }
        },
        aLengthMenu: [
            [5, 25, 50, 100],
            [5, 25, 50, 100]
        ],
        iDisplayLength: 5,
        columns: [
            {
                data: "dept_name"
            },
            {
                data: "dept_created_on",
                render: function ( data, type, full, meta ) {
                    var dateCreated = new Date(data);
                    dateCreated = dateCreated.toLocaleDateString();
                    return dateCreated;
                }
            }
        ]
    });

任何帮助将不胜感激。

提前致谢 :)


问题答案:

您可以将函数传递给DataTables
ajax选项,这将使您完全控制如何在将数据传递给DataTables之前获取和映射数据。

.DataTable({
    serverSide: true,
    ajax: function(data, callback, settings) {
        // make a regular ajax request using data.start and data.length
        $.get('/client/api/v1/departments/', {
            limit: data.length,
            offset: data.start,
            dept_name__icontains: data.search.value
        }, function(res) {
            // map your server's response to the DataTables format and pass it to
            // DataTables' callback
            callback({
                recordsTotal: res.meta.total_count,
                recordsFiltered: res.meta.total_count,
                data: res.objects
            });
        });
    }
});

上面的解决方案已经过jQuery DataTables 1.10.4的测试。

由于这个问题是用Angular标记的,因此这是使用angular-datatables的解决方案。

<div ng-controller="testCtrl">
    <table datatable dt-options="dtOptions" dt-columns="dtColumns" class="row-border hover"></table>
</div>



.controller('testCtrl', function($scope, $http, DTOptionsBuilder, DTColumnBuilder) {
    $scope.dtOptions = DTOptionsBuilder.newOptions()
        .withOption('serverSide', true)
        .withOption('ajax', function(data, callback, settings) {
            // make an ajax request using data.start and data.length
            $http.get('/client/api/v1/departments/', {
                limit: data.length,
                offset: data.start,
                dept_name__icontains: data.search.value
            }).success(function(res) {
                // map your server's response to the DataTables format and pass it to
                // DataTables' callback
                callback({
                    recordsTotal: res.meta.total_count,
                    recordsFiltered: res.meta.total_count,
                    data: res.objects
                });
            });
        })
        .withDataProp('data'); // IMPORTANT¹

    $scope.dtColumns = [
        // your column definitions here
    ];
});

上面的解决方案已经使用角度数据表0.3.0 +数据表1.10.4进行了测试。

¹这里要注意的重要部分是angular-datatables解决方案需要.withDataProp('data')起作用,而纯jQuery
DataTables解决方案则没有data: 'data'选择。



 类似资料:
  • Apache可以让网站管理员自己自定义对一些错误和问题的响应。 自定义的响应可以定义为当服务器检测到错误或问题时才被激活。 如果一个脚本崩溃并产生"500 Server Error"响应,那么这个响应可以被更友好的提示替换或者干脆用重定向语句跳到其他的URL(本地的或外部的)。 行为 老式的行为 Apache1.3 会响应一些对于用户没有任何意义的错误或问题信息,而且不会将产生这些错误的原因写入日

  • 让我们假设使用相同的登录表单,但现在我们还要测试我们的密码在其中某处有感叹号。 app/login-form.component.ts 一个简单的函数接受实例,并返回null如果一切都很好。 如果测试失败,它返回一个具有任意命名属性的对象。 属性名称将用于.hasError()测试。 app/login-form.component.ts <!-- ... --> <div [hidden]="!

  • 问题内容: 我正在努力实现以下目标。 从Request中读取自定义标头及其值: 现在,在响应时,我想在HTTP响应中返回相同的标头对。 我正在使用JAX-RS Web服务的Jersey 2.0实现。 当我发送请求URL时,也会传递请求标头(目前,虽然是Firefox插件-对其进行硬编码)。 收到对该URL的请求后,将调用以下方法: 我该如何实现?任何指针都很棒! 问题答案: 只需注入a 作为方法参

  • 本文向大家介绍C#自定义处理xml数据类实例,包括了C#自定义处理xml数据类实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#自定义处理xml数据类。分享给大家供大家参考。具体分析如下: 这个C#类专门用户处理xml数据,可以大大简化xml的操作,类中封装了常用的xml操作,包括打开、读取xml数据,读取、写入节点数据,通过xpath读取节点数据,导出节点数据等等,还可以根据需要自

  • 本文向大家介绍pytorch中的自定义数据处理详解,包括了pytorch中的自定义数据处理详解的使用技巧和注意事项,需要的朋友参考一下 pytorch在数据中采用Dataset的数据保存方式,需要继承data.Dataset类,如果需要自己处理数据的话,需要实现两个基本方法。 :.getitem:返回一条数据或者一个样本,obj[index] = obj.getitem(index). :.len

  • 基于我之前的问题,我现在需要在响应中添加一个标题。 根据留档,我可以简单地将标头和另一个属性添加到对象。 当我对此进行测试时,它似乎没有携带标头值。 根据这篇文章,为重定向请求设置标题是不可能的。所以除了重定向,也许我应该试试别的? 有什么想法吗?