Added selectedIndex, selectedItem, and dismissal of pop-up should a click occur elsewhere.
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/564debef Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/564debef Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/564debef Branch: refs/heads/develop Commit: 564debef90cc256f2d8fb699ac204749314cd8a9 Parents: 8c020b7 Author: Peter Ent <[email protected]> Authored: Thu Mar 28 10:33:11 2013 -0400 Committer: Peter Ent <[email protected]> Committed: Thu Mar 28 10:33:27 2013 -0400 ---------------------------------------------------------------------- .../apache/flex/html/staticControls/ComboBox.js | 41 ++++++++++++--- 1 files changed, 34 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/564debef/frameworks/js/FlexJS/src/org/apache/flex/html/staticControls/ComboBox.js ---------------------------------------------------------------------- diff --git a/frameworks/js/FlexJS/src/org/apache/flex/html/staticControls/ComboBox.js b/frameworks/js/FlexJS/src/org/apache/flex/html/staticControls/ComboBox.js index 3f1640f..880a0bc 100644 --- a/frameworks/js/FlexJS/src/org/apache/flex/html/staticControls/ComboBox.js +++ b/frameworks/js/FlexJS/src/org/apache/flex/html/staticControls/ComboBox.js @@ -29,6 +29,7 @@ org.apache.flex.html.staticControls.ComboBox = function() { * @type {Array.<Object>} */ this._dataProvider; + this._selectedIndex = -1; }; goog.inherits( org.apache.flex.html.staticControls.ComboBox, org.apache.flex.core.UIBase @@ -67,6 +68,12 @@ function(p) { p.appendChild(this.element); this.positioner = this.element; + + // add a click handler to p's parentElement so that a click + // outside of the combo box can dismiss the pop-up should it + // be visible + p.parentElement.onclick = org.apache.flex.FlexGlobal.createProxy( + this, this.dismissPopup); }; /** @@ -76,8 +83,9 @@ function(p) { org.apache.flex.html.staticControls.ComboBox.prototype.selectChanged = function(event) { var select = event.currentTarget; - var input = this.element.childNodes.item(0); - input.value = select.value; +// var input = this.element.childNodes.item(0); +// input.value = select.value; + this.set_selectedItem(select.value); this.popup.parentNode.removeChild(this.popup); this.popup = null; @@ -88,8 +96,24 @@ function(event) { * @expose * @this {org.apache.flex.html.staticControls.ComboBox} */ +org.apache.flex.html.staticControls.ComboBox.prototype.dismissPopup = +function(event) { + + // remove the popup if it already exists + if( this.popup ) { + this.popup.parentNode.removeChild(this.popup); + this.popup = null; + } +}; + +/** + * @expose + * @this {org.apache.flex.html.staticControls.ComboBox} + */ org.apache.flex.html.staticControls.ComboBox.prototype.buttonClicked = -function() { +function(event) { + + event.stopPropagation(); // remove the popup if it already exists if( this.popup ) { @@ -131,6 +155,8 @@ function() { opts.add(opt); } select.size = n; + if( this._selectedIndex < 0 ) select.value = null; + else select.value = this._dataProvider[this._selectedIndex]; this.popup = popup; @@ -167,7 +193,7 @@ function(value) { */ org.apache.flex.html.staticControls.ComboBox.prototype.get_selectedIndex = function() { - return this.element.childNodes.item(1).selectedIndex; + return this._selectedIndex; }; /** @@ -177,7 +203,7 @@ function() { */ org.apache.flex.html.staticControls.ComboBox.prototype.set_selectedIndex = function(value) { - this.element.childNodes.item(1).selectedIndex = value; + this._selectedIndex = value; }; /** @@ -187,7 +213,8 @@ function(value) { */ org.apache.flex.html.staticControls.ComboBox.prototype.get_selectedItem = function() { - return this._dataProvider[this.element.childNodes.item(1).selectedIndex]; + if( this._dataProvider == null || this._selectedIndex < 0 || this._selectedIndex >= this._dataProvider.length ) return null; + return this._dataProvider[this._selectedIndex]; }; /** @@ -206,7 +233,7 @@ function(value) { break; } if (i < n) { - this.element.childNodes.item(1).selectedIndex = i; + this._selectedIndex = i; this.element.childNodes.item(0).value = this._dataProvider[i]; } };
