X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=Roo%2Fform%2FComboBoxArray.js;h=5e83b79c25f70eaa2ab422e633303d1a9bd657c6;hb=b1c54ac13f89058b1238d34fdbc04d7c1885a2c7;hp=4e88a637da84bb5dd41c46c9e1a4688ce93cca61;hpb=08fb274e6d874a60f37630b21e3d83569210fcd0;p=roojs1 diff --git a/Roo/form/ComboBoxArray.js b/Roo/form/ComboBoxArray.js index 4e88a637da..5e83b79c25 100644 --- a/Roo/form/ComboBoxArray.js +++ b/Roo/form/ComboBoxArray.js @@ -36,6 +36,24 @@ Roo.form.ComboBoxArray = function(config) { + this.addEvents({ + /** + * @event beforeremove + * Fires before remove the value from the list + * @param {Roo.form.ComboBoxArray} _self This combo box array + * @param {Roo.form.ComboBoxArray.Item} item removed item + */ + 'beforeremove' : true, + /** + * @event remove + * Fires when remove the value from the list + * @param {Roo.form.ComboBoxArray} _self This combo box array + * @param {Roo.form.ComboBoxArray.Item} item removed item + */ + 'remove' : true + + + }); Roo.form.ComboBoxArray.superclass.constructor.call(this, config); @@ -101,6 +119,11 @@ Roo.extend(Roo.form.ComboBoxArray, Roo.form.TextField, this.combo = Roo.factory(this.combo, Roo.form); this.combo.onRender(ct, position); + if (typeof(this.combo.width) != 'undefined') { + this.combo.onResize(this.combo.width,0); + } + + this.combo.initEvents(); // assigned so form know we need to do this.. this.store = this.combo.store; @@ -253,9 +276,8 @@ Roo.extend(Roo.form.ComboBoxArray, Roo.form.TextField, reset : function() { //Roo.form.ComboBoxArray.superclass.reset.call(this); - this.items.each(function(f) { - f.remove(); - }); + this.items.clear(); + this.el.dom.value = ''; if (this.hiddenEl) { this.hiddenEl.dom.value = ''; @@ -269,9 +291,11 @@ Roo.extend(Roo.form.ComboBoxArray, Roo.form.TextField, setValue: function(v) // not a valid action - must use addItems.. { - this.reset(); - - if (this.store.isLocal) { + this.reset(); + + + + if (this.store.isLocal && (typeof(v) == 'string')) { // 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; @@ -282,15 +306,20 @@ Roo.extend(Roo.form.ComboBoxArray, Roo.form.TextField, if (!li.length) { return; } - add = {}; + var add = {}; add[this.valueField] = k; add[this.displayField] = li.item(0).data[this.displayField]; this.addItem(add); }, this) - - - + + } + if (typeof(v) == 'object' ) { + // then let's assume it's an array of objects.. + Roo.each(v, function(l) { + this.addItem(l); + }, this); + } @@ -301,9 +330,17 @@ Roo.extend(Roo.form.ComboBoxArray, Roo.form.TextField, this.reset(); this.el.dom.value = v[this.displayField]; this.hiddenEl.dom.value = v[this.valueField]; + if (typeof(v[this.valueField]) != 'string' || !v[this.valueField].length) { + return; + } + var kv = v[this.valueField]; + var dv = v[this.displayField]; + kv = typeof(kv) != 'string' ? '' : kv; + dv = typeof(dv) != 'string' ? '' : dv; + - var keys = v[this.valueField].split(','); - var display = v[this.displayField].split(','); + var keys = kv.split(','); + var display = dv.split(','); for (var i = 0 ; i < keys.length; i++) { add = {}; @@ -315,10 +352,46 @@ Roo.extend(Roo.form.ComboBoxArray, Roo.form.TextField, }, + /** + * Validates the combox array value + * @return {Boolean} True if the value is valid, else false + */ + validate : function(){ + if(this.disabled || this.validateValue(this.processValue(this.getValue()))){ + this.clearInvalid(); + return true; + } + return false; + }, validateValue : function(value){ return Roo.form.ComboBoxArray.superclass.validateValue.call(this, this.getValue()); + }, + + /*@ + * overide + * + */ + isDirty : function() { + if(this.disabled) { + return false; + } + + try { + var d = Roo.decode(String(this.originalValue)); + } catch (e) { + return String(this.getValue()) !== String(this.originalValue); + } + + var originalValue = []; + + for (var i = 0; i < d.length; i++){ + originalValue.push(d[i][this.valueField]); + } + + return String(this.getValue()) !== String(originalValue.join(',')); + } }); @@ -391,12 +464,18 @@ Roo.extend(Roo.form.ComboBoxArray.Item, Roo.BoxComponent, { remove : function() { + if(this.cb.disabled){ + return; + } + + if(false !== this.cb.fireEvent('beforeremove', this.cb, this)){ + this.cb.items.remove(this); + this.el.child('img').un('click', this.remove, this); + this.el.remove(); + this.cb.updateHiddenEl(); + + this.cb.fireEvent('remove', this.cb, this); + } - this.cb.items.remove(this); - this.el.child('img').un('click', this.remove, this); - this.el.remove(); - this.cb.updateHiddenEl(); } - - }); \ No newline at end of file