#

API Docs for: 3.10.3
Show: Inherited Protected Private Deprecated

# File: datatable/js/datatable-datasource.js

    /**
     * Plugs DataTable with DataSource integration.
     *
     * @module datatable
     * @submodule datatable-datasource
     */

    /**
     * Adds DataSource integration to DataTable.
     * @class Plugin.DataTableDataSource
     * @extends Plugin.Base
     */
    function DataTableDataSource() {
        DataTableDataSource.superclass.constructor.apply(this, arguments);
    }

    /////////////////////////////////////////////////////////////////////////////
    //
    // STATIC PROPERTIES
    //
    /////////////////////////////////////////////////////////////////////////////
    Y.mix(DataTableDataSource, {
        /**
         * The namespace for the plugin. This will be the property on the host which
         * references the plugin instance.
         *
         * @property NS
         * @type String
         * @static
         * @final
         * @value "datasource"
         */
        NS: "datasource",

        /**
         * Class name.
         *
         * @property NAME
         * @type String
         * @static
         * @final
         * @value "dataTableDataSource"
         */
        NAME: "dataTableDataSource",

    /////////////////////////////////////////////////////////////////////////////
    //
    // ATTRIBUTES
    //
    /////////////////////////////////////////////////////////////////////////////
        ATTRS: {
            /**
            * @attribute datasource
            * @description Pointer to DataSource instance.
            * @type {DataSource}
            */
            datasource: {
                setter: "_setDataSource"
            },

            /**
            * @attribute initialRequest
            * @description Request sent to DataSource immediately upon initialization.
            * @type Object
            */
            initialRequest: {
                setter: "_setInitialRequest"
            }
        }
    });

    /////////////////////////////////////////////////////////////////////////////
    //
    // PROTOTYPE
    //
    /////////////////////////////////////////////////////////////////////////////
    Y.extend(DataTableDataSource, Y.Plugin.Base, {
        /////////////////////////////////////////////////////////////////////////////
        //
        // ATTRIBUTE HELPERS
        //
        /////////////////////////////////////////////////////////////////////////////
        /**
        * @method _setDataSource
        * @description Creates new DataSource instance if one is not provided.
        * @param ds {Object | Y.DataSource}
        * @return {DataSource}
        * @private
        */
        _setDataSource: function(ds) {
            return ds || new Y.DataSource.Local(ds);
        },

        /**
        * @method _setInitialRequest
        * @description Sends request to DataSource.
        * @param request {Object} DataSource request.
        * @private
        */
        _setInitialRequest: function(/* request */) {
        },

        /////////////////////////////////////////////////////////////////////////////
        //
        // METHODS
        //
        /////////////////////////////////////////////////////////////////////////////
        /**
        * Initializer.
        *
        * @method initializer
        * @param config {Object} Config object.
        * @private
        */
        initializer: function(config) {
            if(!Y.Lang.isUndefined(config.initialRequest)) {
                this.load({request:config.initialRequest});
            }
        },

        ////////////////////////////////////////////////////////////////////////////
        //
        // DATA
        //
        ////////////////////////////////////////////////////////////////////////////

        /**
         * Load data by calling DataSource's sendRequest() method under the hood.
         *
         * @method load
         * @param config {object} Optional configuration parameters:
         *
         * <dl>
         * <dt>request</dt><dd>Pass in a new request, or initialRequest is used.</dd>
         * <dt>callback</dt><dd>Pass in DataSource callback object, or the following default is used:
         *    <dl>
         *      <dt>success</dt><dd>datatable.onDataReturnInitializeTable</dd>
         *      <dt>failure</dt><dd>datatable.onDataReturnInitializeTable</dd>
         *      <dt>scope</dt><dd>datatable</dd>
         *      <dt>argument</dt><dd>datatable.getState()</dd>
         *    </dl>
         * </dd>
         * <dt>datasource</dt><dd>Pass in a new DataSource instance to override the current DataSource for this transaction.</dd>
         * </dl>
         */
        load: function(config) {
            config = config || {};
            config.request = config.request || this.get("initialRequest");
            config.callback = config.callback || {
                success: Y.bind(this.onDataReturnInitializeTable, this),
                failure: Y.bind(this.onDataReturnInitializeTable, this),
                argument: this.get("host").get("state") //TODO
            };

            var ds = (config.datasource || this.get("datasource"));
            if(ds) {
                ds.sendRequest(config);
            }
        },

        /**
         * Callback function passed to DataSource's sendRequest() method populates
         * an entire DataTable with new data, clearing previous data, if any.
         *
         * @method onDataReturnInitializeTable
         * @param e {Event.Facade} DataSource Event Facade object.
         */
        onDataReturnInitializeTable : function(e) {
            var records = (e.response && e.response.results) || [];

            this.get("host").set("data", records);
        }
    });

    Y.namespace("Plugin").DataTableDataSource = DataTableDataSource;