roojs-ui.js
[roojs1] / Roo / form / ComboBoxArray.js
index 529f5cb..eeef951 100644 (file)
@@ -7,7 +7,7 @@
 
 /**
  * @class Roo.form.ComboBoxArray
- * @extends Roo.form.ComboBox
+ * @extends Roo.form.TextField
  * A facebook style adder... for lists of email / people / countries  etc...
  * pick multiple items from a combo box, and shows each one.
  *
@@ -82,8 +82,8 @@ Roo.extend(Roo.form.ComboBoxArray, Roo.form.TextField,
     items  : false,
     // private - the hidden field el.
     hiddenEl : false,
-    
-    boxWidth : 200, // use to set the box around the entry..
+    // private - the filed el..
+    el : false,
     
     //validateValue : function() { return true; }, // all values are ok!
     //onAddClick: function() { },
@@ -92,7 +92,7 @@ Roo.extend(Roo.form.ComboBoxArray, Roo.form.TextField,
     {
         
         // create the standard hidden element
-        Roo.form.ComboBoxArray.superclass.onRender.call(this, ct, position);
+        //Roo.form.ComboBoxArray.superclass.onRender.call(this, ct, position);
         
         
         // give fake names to child combo;
@@ -102,6 +102,11 @@ Roo.extend(Roo.form.ComboBoxArray, Roo.form.TextField,
         this.combo = Roo.factory(this.combo, Roo.form);
         this.combo.onRender(ct, position);
         
+        // assigned so form know we need to do this..
+        this.store          = this.combo.store;
+        this.valueField     = this.combo.valueField;
+        this.displayField   = this.combo.displayField ;
+        
         
         this.combo.wrap.addClass('x-cbarray-grp');
         
@@ -113,6 +118,9 @@ Roo.extend(Roo.form.ComboBoxArray, Roo.form.TextField,
              
         this.hiddenEl = this.combo.wrap.createChild({
             tag: 'input',  type:'hidden' , name: this.hiddenName, value : ''
+        });
+        this.el = this.combo.wrap.createChild({
+            tag: 'input',  type:'hidden' , name: this.name, value : ''
         });
          //   this.el.dom.removeAttribute("name");
         
@@ -120,12 +128,12 @@ Roo.extend(Roo.form.ComboBoxArray, Roo.form.TextField,
         this.outerWrap = this.combo.wrap;
         this.wrap = cbwrap;
         
-        this.outerWrap.setWidth(this.boxWidth);
+        this.outerWrap.setWidth(this.width);
         this.outerWrap.dom.removeChild(this.el.dom);
         
         this.wrap.dom.appendChild(this.el.dom);
-        this.outerWrap.dom.removeChild(this.trigger.dom);
-        this.combo.wrap.dom.appendChild(this.trigger.dom);
+        this.outerWrap.dom.removeChild(this.combo.trigger.dom);
+        this.combo.wrap.dom.appendChild(this.combo.trigger.dom);
         
         this.combo.trigger.setStyle('position','relative');
         this.combo.trigger.setStyle('left', '0px');
@@ -168,13 +176,15 @@ Roo.extend(Roo.form.ComboBoxArray, Roo.form.TextField,
     {
         // returns hidden if it's set..
         if (!this.rendered) {return ''};
-        return  this.hiddenListName;
+        return  this.hiddenName ? this.hiddenName : this.name;
         
     },
     
     
     onResize: function(w, h){
         
+        return;
+        // not sure if this is needed..
         this.combo.onResize(w,h);
         
         if(typeof w != 'number'){
@@ -257,15 +267,49 @@ Roo.extend(Roo.form.ComboBoxArray, Roo.form.TextField,
     },
     setValue: function(v) // not a valid action - must use addItems..
     {
-        if (typeof(v) != 'object') {
-            return;
+         
+        
+        if (this.store.isLocal) {
+            // then we can use the store to find the values..
+            // comma seperated at present.. this needs to allow JSON based encoding..
+            this.hiddenEl.value  = v;
+            var v_ar = [];
+            Roo.each(v.split(','), function(k) {
+                Roo.log("CHECK " + this.valueField + ',' + k);
+                var li = this.store.query(this.valueField, k);
+                if (!li.length) {
+                    return;
+                }
+                add = {};
+                add[this.valueField] = k;
+                add[this.displayField] = li.item(0).data[this.displayField];
+                
+                this.addItem(add);
+            }, this) 
+            
+                
+            
         }
-        var _this = this;
-        Roo.each(v, function(l) {
-            _this.addItem(l);
-        });
+        
         
     },
+    setFromData: function(v)
+    {
+        // this recieves an object, if setValues is called.
+        var keys = v[this.valueField].split(',');
+        var display = v[this.displayField].split(',');
+        for (var i = 0 ; i < keys.length; i++) {
+            
+            add = {};
+            add[this.valueField] = keys[i];
+            add[this.displayField] = display[i];
+            this.addItem(add);
+        }
+      
+        
+    },
+    
+    
     validateValue : function(value){
         return Roo.form.ComboBoxArray.superclass.validateValue.call(this, this.getValue());