Ank*_*pli 15 django ajax datatable tastypie angularjs
我开始工作AngularJS
和DataTables
,不知是否可以定制响应DataTables
期待.DataTables插件的当前预期是这样的:
{
"draw": 1,
"recordsTotal": 57,
"recordsFiltered": 5,
"data": [...]
}
Run Code Online (Sandbox Code Playgroud)
在服务器端,API正在处理 django-tastypie
服务器的响应是:
{
meta: {
limit: 20,
next: null,
offset: 0,
previous: null,
total_count: 2
},
objects: [...]
}
Run Code Online (Sandbox Code Playgroud)
那么,有没有办法调整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;
}
}
]
});
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
提前致谢 :)
Fab*_*tté 23
您可以将函数传递给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
});
});
}
});
Run Code Online (Sandbox Code Playgroud)
上面的解决方案已经使用jQuery DataTables 1.10.4 进行了测试.
由于这个问题用Angular标记,这里是使用角度数据表的解决方案.
<div ng-controller="testCtrl">
<table datatable dt-options="dtOptions" dt-columns="dtColumns" class="row-border hover"></table>
</div>
Run Code Online (Sandbox Code Playgroud)
.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
];
});
Run Code Online (Sandbox Code Playgroud)
上述解决方案已使用角度数据表0.3.0 + DataTables 1.10.4进行了测试.
¹这里要注意的重要部分是angular-datatables解决方案需要.withDataProp('data')
工作,而纯jQuery DataTables解决方案没有data: 'data'
选项.
归档时间: |
|
查看次数: |
14322 次 |
最近记录: |