REST-ful tables
Summary
A table whose entities/rows are retrieved, added and updated via rest (CRUD). It uses backbone.js to sync the tables state back to the server and vice versa, avoiding page refreshes.
Status
| API status: | general | 
|---|---|
| Web resource key: | 
                com.atlassian.auiplugin:aui-restfultable
         | 
    
| AMD Module key: | N/A | 
| Experimental API: | 3.7.0 | 
| General API: | 5.8 | 
Working example
An example can be found by running the AUI refapp, and navigating to the restfultable test page
Code
Below is an example table to configure versions for a JIRA project.
Options
The following options are available when creating a new AJS.RestfulTable.
| Required | Name | Description | Type | Default | 
|---|---|---|---|---|
el  | 
        The <table> element  | 
        String, HTMLElement, jQuery  | 
        None  | 
    |
resources  | 
         A map of resources:  
  | 
         String, Function   | 
        None  | 
    |
columns  | 
         An array of columns to render   | 
        Array  | 
        None  | 
    |
noEntriesMsg  | 
        A message that will be displayed in the table when there are no entries  | 
        String  | 
        None  | 
    |
model  | 
        Backbone.Model representation used for entities AJS.RestfulTable.EntryModel  | 
        AJS.RestfulTable.EntryModel  | 
        AJS.RestfulTable.EntryModel  | 
    |
reverseOrder  | 
        When all the entries are retrieved from the "all" resource, reverse the order.  | 
        Boolean  | 
        false  | 
    |
autoFocus  | 
        Whether or not to auto focus the first field of the create row  | 
        Boolean  | 
        false  | 
    |
loadingMsg  | 
        A message that will be displayed in the table when it is loading  | 
        String  | 
        Loading  | 
    |
allowCreate  | 
        Whether or not user can create new entries  | 
        Boolean  | 
        true  | 
    |
allowEdit  | 
        Whether or not the user can edit table  | 
        Boolean  | 
        true  | 
    |
allowReorder  | 
        Whether or not the user can reorder rows  | 
        Boolean  | 
        false  | 
    |
allowDelete  | 
        Whether or not a row can be deleted  | 
        Boolean  | 
        true  | 
    |
createPosition  | 
        If set to "bottom", creates new rows at the bottom of the table instead of the top.  | 
        |||
id  | 
        The id for the table. This id will be used to fire events specific to this instance.  | 
        |||
cancelAccessKey  | 
        Sets accesskey attribute  | 
        |||
submitAccessKey  | 
        Sets accesskey attribute  | 
        |||
deleteConfirmationCallback  | 
        Function returning promise. If promise is resolved row will be deleted, if rejected deletion will be prevented  | 
        Function -> Promise  | 
        
Events
Events have 3 contexts in which they can be triggered.
AJS.RestfulTable
Name  | 
        Description  | 
        Arguments  | 
    
|---|---|---|
AJS.RestfulTable.Events.INITIALIZED  | 
        triggered when the table has finished initial render  | 
        None  | 
    
AJS.RestfulTable.Events.ROW_INITIALIZED  | 
        triggered when a row is rendered  | 
        AJS.RestfulTable.Row  | 
    
AJS.RestfulTable.Events.ROW_ADDED  | 
        triggered when a row is added to the RestfulTable  | 
        AJS.RestfulTable.Row  | 
    
AJS.RestfulTable.Events.ROW_REMOVED  | 
        triggered when a row is removed from the RestfulTable  | 
        AJS.RestfulTable.Row  | 
    
AJS.RestfulTable.Events.EDIT_ROW  | 
        triggered when a row edit is started by the user  | 
        AJS.RestfulTable.EditRow  | 
    
AJS.RestfulTable.Events.REORDER_SUCCESS  | 
        triggered when a successful drag and drop reordering of rows is performed  | 
        XmlHttpRequest object  | 
    
AJS.RestfulTable.Events.SERVER_ERROR  | 
        triggered when the server returns a non-200 response for an operation; at the table level, this is mainly drag and drop operations.  | 
        
  | 
    
AJS.RestfulTable.EditRow
Name  | 
        Description  | 
        Arguments  | 
    
|---|---|---|
AJS.RestfulTable.Events.CANCEL  | 
        Switches row back to read only mode, restoring values None  | 
        None | 
AJS.RestfulTable.Events.SAVE  | 
        Sends updated values back to server and switches back to readonly mode <boolean> - whether to focus read-only view  | 
        None  | 
    
AJS.RestfulTable.Events.CREATED  | 
        Triggered when a new entry has been created  | 
        None  | 
    
AJS.RestfulTable.Events.FOCUS  | 
        Gives focused style, removing focus from any other row.  | 
        <string> - name of field to focus  | 
    
AJS.RestfulTable.Events.BLUR  | 
        Removes focused style, restoring focus back to the createRow  | 
        None  | 
    
AJS.RestfulTable.Events.SUBMIT_STARTED  | 
        Triggered when update/create request to server started  | 
        None  | 
    
AJS.RestfulTable.Events.SUBMIT_FINISHED  | 
        Triggered when update/create request to server finished  | 
        None  | 
    
AJS.RestfulTable.Events.VALIDATION_ERROR  | 
        Triggered when server returns validation errors  | 
        Object - errors  | 
    
AJS.RestfulTable.Events.RENDER  | 
        Triggered when row has rendered  | 
        None  | 
    
AJS.RestfulTable.Row
Name  | 
        Description  | 
        Arguments  | 
    
|---|---|---|
AJS.RestfulTable.Events.FOCUS  | 
        Gives focused style, removing focus from any other row.  | 
        None  | 
    
AJS.RestfulTable.Events.BLUR  | 
        Removes focused style, restoring focus back to the createRow  | 
        None  | 
    
AJS.RestfulTable.Events.UPDATED  | 
        Fades row from blue to transparent  | 
        None  | 
    
AJS.RestfulTable.Events.MODAL  | 
        Disables all interactions on table, except for this row  | 
        None  | 
    
AJS.RestfulTable.Events.MODELESS  | 
        Enables all interactions on table  | 
        None  | 
    
AJS.RestfulTable.Events.RENDER  | 
        Triggered when row has rendered  | 
        None  | 
    
Methods
Methods have 3 contexts in which they can be called
AJS.RestfulTable
Name  | 
        Description  | 
        Arguments  | 
        Returns  | 
    
|---|---|---|---|
addRow  | 
        Adds row to collection and renders it  | 
         <Backbone.Model> model   | 
        AJS.RestfulTable  | 
    
getColumnCount  | 
        Gets the number of columns in the table  | 
        None  | 
        Number  | 
    
isEmpty  | 
        Returns true if there are no entries in the table  | 
        None  | 
        Boolean  | 
    
getModels  | 
        Gets backbone collection  | 
        None  | 
        Backbone.Collection  | 
    
getTable  | 
        Gets jQuery element for <table>  | 
        None  | 
        jQuery  | 
    
getTableBody  | 
        Gets jQuery element for <tbody>  | 
        None  | 
        jQuery  | 
    
getCreateRow  | 
        Gets view used for create row (first row in table)  | 
        None  | 
        AJS.RestfulTable.EditRow  | 
    
showNoEntriesMsg  | 
        Shows message options.noEntriesMsg to the user if there are no entries  | 
        None  | 
        AJS.RestfulTable  | 
    
removeNoEntriesMsg  | 
        Removes message options.noEntriesMsg to the user if there ARE entries  | 
        None  | 
        AJS.RestfulTable  | 
    
edit  | 
        Converts readonly row to editable view  | 
         <String> field - field name to focus   | 
        AJS.RestfulTable.EditRow  | 
    
AJS.RestfulTable.EditRow
Name  | 
        Description  | 
        Arguments  | 
        Returns  | 
    
|---|---|---|---|
hasFocus  | 
        Returns true if row has focused class  | 
        None  | 
        Boolean  | 
    
focus  | 
        Focus specified field, first field or the first field with an error (in order)  | 
        <String> field - field name to focus  | 
        AJS.RestfulTable.EditRow  | 
    
unfocus  | 
        Unfocuses row and disables its submit button  | 
        None  | 
        AJS.RestfulTable.EditRow  | 
    
disable  | 
        Disables all fields and fades out row  | 
        None  | 
        AJS.RestfulTable.EditRow  | 
    
enable  | 
        Enables all fields, and returns row to full opacity  | 
        None  | 
        AJS.RestfulTable.EditRow  | 
    
showLoading  | 
        Shows loading indicator  | 
        None  | 
        AJS.RestfulTable.EditRow  | 
    
hideLoading  | 
        Hides loading indicator  | 
        None  | 
        AJS.RestfulTable.EditRow  | 
    
submit  | 
        Serialises form fields and updates client and server model  | 
        <Boolean> focusUpdated - flag of whether to focus read-only view after successful submission  | 
        AJS.RestfulTable.EditRow  | 
    
AJS.RestfulTable.Row
Name  | 
        Description  | 
        Arguments  | 
        Returns  | 
    
|---|---|---|---|
sync  | 
        Save changed attributes back to server and re-render  | 
        <object> attr  | 
        AJS.RestfulTable.Row  | 
    
refresh  | 
        Get model from server and re-render  | 
        None  | 
        AJS.RestfulTable.Row  | 
    
edit  | 
        Switches row into edit mode  | 
        None  | 
        AJS.RestfulTable.Row  | 
    
focus  | 
        Focuses row  | 
        None  | 
        AJS.RestfulTable.Row  | 
    
unfocus  | 
        Unfocuses row  | 
        None  | 
        AJS.RestfulTable.Row  | 
    
showLoading  | 
        Shows loading indicator  | 
        None  | 
        AJS.RestfulTable.Row  | 
    
hideLoading  | 
        Hides loading indicator  | 
        None  | 
        AJS.RestfulTable.Row  | 
    
Setup
For a simple table you need only configure 3 options:
- el - The element you wish to populate
 - resources
 - all - Rest resource OR function that retrieves all entities
 - self - Rest resource to sync a single entities state (CRUD)
 - columns - Which properties of the entities to render. The id of a column maps to the property of an entity. This simple table can be extended by specifying your own model and column views:
 - model - Allows you to modify and format what is sent and received from the server for each entity/row. Also allowing additional logic to be supplied to your views.
 - column views - Allow you to specify custom renderers for the read/create/edit modes of individual columns.
 
Confirm
You want to delete row:
Are you sure?