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];
     }
 };

Reply via email to