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>
そのコードは正常に機能しますが、アイテムの数が少ないです。しかし、recoreds の数が多い場合 (たとえば 500)、アイテムが完全に更新される前にカスタム バインディングが実行されます。何かアイデアはありますか?
更新AJAX を介してサーバーからデータを取得するため、監視可能な配列が空である
間にカスタム バインディングが最初に実行される可能性があります。items