На самом деле нет необходимости использовать knockoutJs для выполнения привязки dataTable. Поскольку knockoutJs уже связывает таблицу HTML с моделью, просто используйте следующее:
$(function() {
var dtOptions = {
"bPaginate": false,
"bLengthChange": false,
"bFilter": false,
"bInfo": false,
bJQueryUI: true
}
var dt = $("#leadsTable").dataTable(dtOptions);
$("#searchButton").click(function() {
//... set url with search terms...
$.get(url, function (data) {
// destroy existing table
dt.fnDestroy();
ko.mapping.fromJS(data, vm.model);
// re-created AFTER ko mapping
dt.dataTable(dtOptions);
});
})
});
var serialisedModel = @Html.Raw(new JavaScriptSerializer().Serialize(Model));
var vm = {
data: ko.toJSON(serialisedModel),
}
ko.applyBindings(vm);
Важнейшей частью является уничтожение существующей таблицы данных до сопоставления и повторное создание после сопоставления. Мне пришлось сохранить ссылку на исходную таблицу данных для последующего уничтожения ...