# inputEx-library

### inputEx 0.5.1

inputEx-library > inputEx > DSSelectField.js (source view)
Search:
Filters Show Private Show Protected Show Deprecated

    (function () {

    	/**
    	 * Create a select field from a datasource
    	 * @class inputEx.DSSelectField
    	 * @extends inputEx.SelectField
    	 * @constructor
    	 * @param {Object} options Added options:
    	 * <ul>
    	 *	   <li>options: list of option elements configurations</li>
    	 *    <li>datasource: the datasource</li>
    	 *    <li>valueKey: value key</li>
    	 *    <li>labelKey: label key</li>
    	 * </ul>
    	 */
    	inputEx.DSSelectField = function (options) {
    		inputEx.DSSelectField.superclass.constructor.call(this, options);
    	};

    	YAHOO.lang.extend(inputEx.DSSelectField, inputEx.SelectField, {
    		/**
    		 * Setup the additional options for selectfield
    		 * @param {Object} options Options object as passed to the constructor
    		 */
    		setOptions: function (options) {

    			inputEx.DSSelectField.superclass.setOptions.call(this, options);

    			this.options.valueKey = options.valueKey || "value";
    			this.options.labelKey = options.labelKey || "label";

    			this.options.datasource = options.datasource;

    		},

    		/**
    		 * Build a select tag with options
    		 */
    		renderComponent: function () {

    			inputEx.DSSelectField.superclass.renderComponent.call(this);

    			// Send the data request
    			this.sendDataRequest(null); // TODO: configurable default request ?
    		},

    		/**
    		 * Send the datasource request
    		 */
    		sendDataRequest: function (oRequest) {
    			if (!!this.options.datasource) {
    				this.options.datasource.sendRequest(oRequest, {success: this.onDatasourceSuccess, failure: this.onDatasourceFailure, scope: this});
    			}
    		},

    		/**
    		 * Insert the options
    		 */
    		populateSelect: function (items) {

    			var i, length;

    			// remove previous <option>s nodes
    			while (this.el.childNodes.length > 0) {
    				this.el.removeChild(this.el.childNodes[0]);
    			}

    			// add new options
    			for (i = 0, length = items.length; i < length ; i += 1) {
    				this.addChoice({ value: items[i][this.options.valueKey], label: items[i][this.options.labelKey] });
    			}
    		},

    		/**
    		 * Callback for request success
    		 */
    		onDatasourceSuccess: function (oRequest, oParsedResponse, oPayload) {
    			this.populateSelect(oParsedResponse.results);
    		},

    		/**
    		 * Callback for request failure
    		 */
    		onDatasourceFailure: function (oRequest, oParsedResponse, oPayload) {
    			// TODO
    			this.el.innerHTML = "<option>error</option>";
    		}

    	});

    	// Register this class as "dsselect" type
    	inputEx.registerType("dsselect", inputEx.DSSelectField);

    }());

Copyright © 2010 Eric Abouaf All rights reserved.