我正在尝试对项目列表执行回调以使用DataTable进行分页。现在我想在我的所有项目都被渲染之后而不是在每个项目被渲染之后执行我的回调。在那个SO 问题之后,我创建了简单的自定义绑定
ko.bindingHandlers.ConvertToDataTable = {
update: function (element, valueAccessor, allBindings) {
var list = ko.utils.unwrapObservable(valueAccessor()); //grab a dependency to the obs array
var tableId = allBindings().tableId;
$('#' + tableId).dataTable({
"sDom": "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>"
});
}
}
我的看法是:
<table class="table table-striped table-bordered" data-bind="attr: { id: tableId }">
<thead>
<tr>
<td>Task Name</td>
<td>Task Description</td>
</tr>
</thead>
<tbody>
<!-- ko foreach: tasks, ConvertToDataTable: tasks, tableId: tableId -->
<tr>
<td data-bind="text: Name"></td>
<td data-bind="text: Details"></td>
</tr>
<!-- /ko -->
</tbody>
</table>
该代码工作正常,但项目数量很少。但是如果有大量的记录(例如 500),自定义绑定是在我的项目完全渲染之前执行的。有什么想法吗?
更新
我通过 AJAX 从服务器获取数据,所以当我的可观察数组items
为空时,我的自定义绑定可能首先执行