/* Copyright (c) 2010, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.com/yui/license.html version: 3.3.0 build: 3167 */ YUI.add('datatable-datasource', function(Y) { /** * Plugs DataTable with DataSource integration. * * @module datatable * @submodule datatable-datasource */ /** * Adds DataSource integration to DataTable. * @class 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 Y.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} * @returns Y.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: * *
*
request
Pass in a new request, or initialRequest is used.
*
callback
Pass in DataSource callback object, or the following default is used: *
*
success
datatable.onDataReturnInitializeTable
*
failure
datatable.onDataReturnInitializeTable
*
scope
datatable
*
argument
datatable.getState()
*
*
*
datasource
Pass in a new DataSource instance to override the current DataSource for this transaction.
*
*/ 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) { this.get("host").set("recordset", new Y.Recordset({records: e.response.results})); } }); Y.namespace("Plugin").DataTableDataSource = DataTableDataSource; }, '3.3.0' ,{requires:['datatable-base','plugin','datasource-local']});