To create a table using multiple components simply enable those you want to use and set any specific options for them. The below example uses ajax to load the column and row data and enables the filtering, paging, sorting, editing and state components simultaneously.
<!-- Table Markup -->
<table id="showcase-example-1" class="table" data-paging="true" data-filtering="true" data-sorting="true" data-editing="true" data-state="true"></table>
<!-- Editing Modal Markup -->
<div class="modal fade" id="editor-modal" tabindex="-1" role="dialog" aria-labelledby="editor-title">
<style scoped>
/* provides a red astrix to denote required fields - this should be included in common stylesheet */
.form-group.required .control-label:after {
content:"*";
color:red;
margin-left: 4px;
}
</style>
<div class="modal-dialog" role="document">
<form class="modal-content form-horizontal" id="editor">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="editor-title">Add Row</h4>
</div>
<div class="modal-body">
<input type="number" id="id" name="id" class="hidden"/>
<div class="form-group required">
<label for="firstName" class="col-sm-3 control-label">First Name</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="firstName" name="firstName" placeholder="First Name" required>
</div>
</div>
<div class="form-group required">
<label for="lastName" class="col-sm-3 control-label">Last Name</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="lastName" name="lastName" placeholder="Last Name" required>
</div>
</div>
<div class="form-group">
<label for="jobTitle" class="col-sm-3 control-label">Job Title</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="jobTitle" name="jobTitle" placeholder="Job Title">
</div>
</div>
<div class="form-group required">
<label for="startedOn" class="col-sm-3 control-label">Started On</label>
<div class="col-sm-9">
<input type="date" class="form-control" id="startedOn" name="startedOn" placeholder="Started On" required>
</div>
</div>
<div class="form-group">
<label for="dob" class="col-sm-3 control-label">Date of Birth</label>
<div class="col-sm-9">
<input type="date" class="form-control" id="dob" name="dob" placeholder="Date of Birth">
</div>
</div>
<div class="form-group">
<label for="status" class="col-sm-3 control-label">Status</label>
<div class="col-sm-9">
<select class="form-control" id="status" name="status">
<option value="Active">Active</option>
<option value="Disabled">Disabled</option>
<option value="Suspended">Suspended</option>
</select>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Save changes</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
</div>
</form>
</div>
</div>
jQuery(function($){
var $modal = $('#editor-modal'),
$editor = $('#editor'),
$editorTitle = $('#editor-title'),
ft = FooTable.init('#showcase-example-1', {
columns: $.get("../../content/columns.json"),
rows: $.get("../../content/rows.json"),
editing: {
addRow: function(){
$modal.removeData('row');
$editor[0].reset();
$editorTitle.text('Add a new row');
$modal.modal('show');
},
editRow: function(row){
var values = row.val();
$editor.find('#id').val(values.id);
$editor.find('#firstName').val(values.firstName);
$editor.find('#lastName').val(values.lastName);
$editor.find('#jobTitle').val(values.jobTitle);
$editor.find('#status').val(values.status);
$editor.find('#startedOn').val(values.started.format('YYYY-MM-DD'));
$editor.find('#dob').val(values.dob.format('YYYY-MM-DD'));
$modal.data('row', row);
$editorTitle.text('Edit row #' + values.id);
$modal.modal('show');
},
deleteRow: function(row){
if (confirm('Are you sure you want to delete the row?')){
row.delete();
}
}
}
}),
uid = 10001;
$editor.on('submit', function(e){
if (this.checkValidity && !this.checkValidity()) return;
e.preventDefault();
var row = $modal.data('row'),
values = {
id: $editor.find('#id').val(),
firstName: $editor.find('#firstName').val(),
lastName: $editor.find('#lastName').val(),
jobTitle: $editor.find('#jobTitle').val(),
started: moment($editor.find('#startedOn').val(), 'YYYY-MM-DD'),
dob: moment($editor.find('#dob').val(), 'YYYY-MM-DD'),
status: $editor.find('#status option:selected').val()
};
if (row instanceof FooTable.Row){
row.val(values);
} else {
values.id = uid++;
ft.rows.add(values);
}
$modal.modal('hide');
});
});