JSFiddle - React, Tailwind, and code Playground
by Gabriel Tran
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/datatables/1.10.1/js/jquery.dataTables.min.js"></script>
<script src="https://datatables.net/release-datatables/extensions/FixedColumns/js/dataTables.fixedColumns.js"></script>
<link rel="stylesheet" href="https://datatables.net/release-datatables/media/css/jquery.dataTables.css">
<link rel="stylesheet" href="https://datatables.net/release-datatables/extensions/FixedColumns/css/dataTables.fixedColumns.css">
Number of left columns to fix: <input data-bind="value: fixedColumnCount" />
<table data-bind="dataTable: { scrollY: '300px', scrollX: true, scrollCollapse: true, paging: false }, fixedColumns: { iLeftColumns: fixedColumnCount }" class="stripe row-border order-column" cellspacing="0" width="100%">
<thead>
<tr>
<th>First name</th>
<th>Last name</th>
<th>Position</th>
<th>Office</th>
<th>Age</th>
<th>Start date</th>
<th>Salary</th>
<th>Extn.</th>
<th>E-mail</th>
</tr>
</thead>
<tbody>
<tr>
<td>Tiger</td>
<td>Nixon</td>
<td>System Architect</td>
<td>Edinburgh</td>
<td>61</td>
<td>2011/04/25</td>
<td>$320,800</td>
<td>5421</td>
<td>[email protected]</td>
</tr>
<tr>
<td>Garrett</td>
<td>Winters</td>
...
CSS
/* Ensure that the demo table scrolls */
th, td { white-space: nowrap; }
div.dataTables_wrapper {
width: 800px;
margin: 0 auto;
}
JavaScript
/*$(document).ready(function() {
var table = $('#example').DataTable( {
scrollY: "300px",
scrollX: true,
scrollCollapse: true,
paging: false
} );
new $.fn.dataTable.FixedColumns( table, {
leftColumns: 3
} );
} );
*/
ko.bindingHandlers.dataTable = {
update: function (el, valueAccessor, allBindingsAccessor, viewModel) {
$(el).DataTable(ko.toJS(valueAccessor()));
}
}
ko.bindingHandlers.fixedColumns = {
init: function (el, valueAccessor, allBindingsAccessor, viewModel) {
if ($.fn.dataTable.fnIsDataTable($(el))) {
$(el).data("fixedColumns", new $.fn.dataTable.FixedColumns($(el).dataTable(), ko.toJS(valueAccessor())));
}
},
update: function (el, valueAccessor, allBindingsAccessor, viewModel) {
var fc = $(el).data("fixedColumns");
if (fc) {
$.extend(fc.s, ko.toJS(valueAccessor()));
fc.fnRedrawLayout();
}
}
}
var viewmodel = function () {
this.fixedColumnCount = ko.observable(3);
};
var vm = new viewmodel()
ko.applyBindings(vm);