# Yahoo! UI Library

### datasource 3.3.0

Yahoo! UI Library > datasource > datasource-function.js (source view)
Search:
Filters Show Private Show Protected Show Deprecated

    /**
     * Provides a DataSource implementation which can be used to retrieve data from a custom function.
     *
     * @module datasource
     * @submodule datasource-function
     */

    /**
     * Function subclass for the DataSource Utility.
     * @class DataSource.Function
     * @extends DataSource.Local
     * @constructor
     */
    var LANG = Y.Lang,

        DSFn = function() {
            DSFn.superclass.constructor.apply(this, arguments);
        };

        /////////////////////////////////////////////////////////////////////////////
        //
        // DataSource.Function static properties
        //
        /////////////////////////////////////////////////////////////////////////////
    Y.mix(DSFn, {
        /**
         * Class name.
         *
         * @property NAME
         * @type String
         * @static
         * @final
         * @value "dataSourceFunction"
         */
        NAME: "dataSourceFunction",

        /////////////////////////////////////////////////////////////////////////////
        //
        // DataSource.Function Attributes
        //
        /////////////////////////////////////////////////////////////////////////////

        ATTRS: {
            /**
            * @attribute source
            * @description Pointer to live data.
            * @type MIXED
            * @default null
            */
            source: {
                validator: LANG.isFunction
            }
        }
    });

    Y.extend(DSFn, Y.DataSource.Local, {
        /**
         * Passes query string to IO. Fires <code>response</code> event when
         * response is received asynchronously.
         *
         * @method _defRequestFn
         * @param e {Event.Facade} Event Facade with the following properties:
         * <dl>
         * <dt>tId (Number)</dt> <dd>Unique transaction ID.</dd>
         * <dt>request (Object)</dt> <dd>The request.</dd>
         * <dt>callback (Object)</dt> <dd>The callback object with the following properties:
         *     <dl>
         *         <dt>success (Function)</dt> <dd>Success handler.</dd>
         *         <dt>failure (Function)</dt> <dd>Failure handler.</dd>
         *     </dl>
         * </dd>
         * <dt>cfg (Object)</dt> <dd>Configuration object.</dd>
         * </dl>
         * @protected
         */
        _defRequestFn: function(e) {
            var fn = this.get("source"),
                response;

                if(fn) {
                    try {
                        response = fn(e.request, this, e);
                        this.fire("data", Y.mix({data:response}, e));
                    }
                    catch(error) {
                        e.error = error;
                        Y.log("Function execution failure", "error", "datasource-function");
                        this.fire("data", e);
                    }
                }
                else {
                    e.error = new Error("Function data failure");
                    Y.log("Function data failure", "error", "datasource-function");
                    this.fire("data", e);
                }

            return e.tId;
        }
    });

    Y.DataSource.Function = DSFn;

Copyright © 2011 Yahoo! Inc. All rights reserved.