我有一个通过Knockout.js填充的表,并在表上使用jQuery Datatables 1.9.x进行排序和分页。
<table id="myTasks-table" class="table table-bordered table-striped request-table">
<thead>
<tr>
<th>Request Id</th>
<th>Type</th>
<th>Follow up</th>
</tr>
</thead>
<tbody data-bind="foreach: MyTasksVM.tasks">
<tr>
<td>
<!-- ko if: RequestSource == "I" -->
<a data-bind="attr: { href: '/HelpDesk/ticket/detail/' + ServiceRequestID }"><span data-bind=" text: ServiceRequestID"></span></a>
<!-- /ko -->
<!-- ko if: RequestSource != "I" -->
<a data-bind="attr: { href: '/CustomerService/servicerequest/detail/' + ServiceRequestID }"><span data-bind=" text: ServiceRequestID"></span></a>
<!-- /ko -->
</td>
<td data-bind="text: RequestType"></td>
<td data-bind="text: OutputDate(FollowUpDate)"></td>
</tr>
</tbody>
</table>
以下是用于填写表格的JS:
var dtOptions = {
"sDom": "<'row'<'span6'<'dt_actions'>l><'span6'f>r>t<'row'<'span6'i><'span6'p>>",
"sPaginationType": "bootstrap",
"iDisplayLength": 10
};
var viewModel = {
MyTasksVM: new MyTasksViewModel()
};
function MyTasksViewModel() {
var self = this;
self.tasks = ko.observableArray([]);
$.ajax({
'async': false,
'url': '/api/customerservice/ServiceRequestListView/GetByEmployee/' + userId,
'dataType': 'text json',
'type': 'GET',
'success': function (json) {
if (json !== null) {
self.tasks(json);
table = $('.request-table').dataTable(dtOptions);
}
}
});
}
有趣的是,当页面底部列出总行数时,它显示1中的1,但列表中至少包含30个项目。搜索也不起作用。当我开始打字时,一切都消失了。创建表的相同方式在应用程序的许多其他区域中使用而没有问题。这个页面上可能出现什么问题?我有一种感觉,我没有看到它是愚蠢的。
更新:我尝试升级到1.10,但仍然遇到问题。
答案 0 :(得分:2)
关于datable:您正在描述数据表的行为,该数据表已使用初始行集(可能为空)进行初始化,并且尚未了解新的更改。
如果要修改现有数据的内容,则需要使用API函数fnAddData / fnUpdate / fnDeleteRow
传递新数据(1.9 API,如果您使用的是新的1.10版本,请查看官方文档... )。
修改<table>
节点无法正常工作。
另一种可能性是在每次更新时销毁并重新创建数据表:
$('.request-table').dataTable().fnDestroy();
$('.request-table').dataTable(dtOptions);