2 Copyright (c) 2010, Yahoo! Inc. All rights reserved.
3 Code licensed under the BSD License:
4 http://developer.yahoo.com/yui/license.html
8 YUI.add('datatable-datasource', function(Y) {
11 * Plugs DataTable with DataSource integration.
14 * @submodule datatable-datasource
18 * Adds DataSource integration to DataTable.
19 * @class DataTableDataSource
20 * @extends Plugin.Base
22 function DataTableDataSource() {
23 DataTableDataSource.superclass.constructor.apply(this, arguments);
26 /////////////////////////////////////////////////////////////////////////////
30 /////////////////////////////////////////////////////////////////////////////
31 Y.mix(DataTableDataSource, {
33 * The namespace for the plugin. This will be the property on the host which
34 * references the plugin instance.
51 * @value "dataTableDataSource"
53 NAME: "dataTableDataSource",
55 /////////////////////////////////////////////////////////////////////////////
59 /////////////////////////////////////////////////////////////////////////////
62 * @attribute datasource
63 * @description Pointer to DataSource instance.
67 setter: "_setDataSource"
71 * @attribute initialRequest
72 * @description Request sent to DataSource immediately upon initialization.
76 setter: "_setInitialRequest"
81 /////////////////////////////////////////////////////////////////////////////
85 /////////////////////////////////////////////////////////////////////////////
86 Y.extend(DataTableDataSource, Y.Plugin.Base, {
87 /////////////////////////////////////////////////////////////////////////////
91 /////////////////////////////////////////////////////////////////////////////
93 * @method _setDataSource
94 * @description Creates new DataSource instance if one is not provided.
95 * @param ds {Object | Y.DataSource}
96 * @returns Y.DataSource
99 _setDataSource: function(ds) {
100 return ds || new Y.DataSource.Local(ds);
104 * @method _setInitialRequest
105 * @description Sends request to DataSource.
106 * @param request {Object} DataSource request.
109 _setInitialRequest: function(request) {
112 /////////////////////////////////////////////////////////////////////////////
116 /////////////////////////////////////////////////////////////////////////////
120 * @method initializer
121 * @param config {Object} Config object.
124 initializer: function(config) {
125 if(!Y.Lang.isUndefined(config.initialRequest)) {
126 this.load({request:config.initialRequest});
130 ////////////////////////////////////////////////////////////////////////////
134 ////////////////////////////////////////////////////////////////////////////
137 * Load data by calling DataSource's sendRequest() method under the hood.
140 * @param config {object} Optional configuration parameters:
143 * <dt>request</dt><dd>Pass in a new request, or initialRequest is used.</dd>
144 * <dt>callback</dt><dd>Pass in DataSource callback object, or the following default is used:
146 * <dt>success</dt><dd>datatable.onDataReturnInitializeTable</dd>
147 * <dt>failure</dt><dd>datatable.onDataReturnInitializeTable</dd>
148 * <dt>scope</dt><dd>datatable</dd>
149 * <dt>argument</dt><dd>datatable.getState()</dd>
152 * <dt>datasource</dt><dd>Pass in a new DataSource instance to override the current DataSource for this transaction.</dd>
155 load: function(config) {
156 config = config || {};
157 config.request = config.request || this.get("initialRequest");
158 config.callback = config.callback || {
159 success: Y.bind(this.onDataReturnInitializeTable, this),
160 failure: Y.bind(this.onDataReturnInitializeTable, this),
161 argument: this.get("host").get("state") //TODO
164 var ds = (config.datasource || this.get("datasource"));
166 ds.sendRequest(config);
171 * Callback function passed to DataSource's sendRequest() method populates
172 * an entire DataTable with new data, clearing previous data, if any.
174 * @method onDataReturnInitializeTable
175 * @param e {Event.Facade} DataSource Event Facade object.
177 onDataReturnInitializeTable : function(e) {
178 this.get("host").set("recordset", new Y.Recordset({records: e.response.results}));
182 Y.namespace("Plugin").DataTableDataSource = DataTableDataSource;
189 }, '3.3.0' ,{requires:['datatable-base','plugin','datasource-local']});