extjs - Ext JS: MultiSelect ComboBox beforedeselect behavior -


i have combobox has multiselect true. combobox has initial value set, selected when open combobox. problem becomes when want use combobox.setvalue... using function apparently fires off beforedeselect event, not select event. , odd thing is, beforedeselect fired values i'm setting in setvalue.

please see this example.

to reproduce issue, can following:

  1. click "set combobox value" button
  2. click drop down
  3. you should see 4 alerts: maryland, pennsylvania, maryland, pennsylvania

or

  1. click drop down
  2. you should see 2 alerts: colorado, colorado
  3. click "set combobox value" button
  4. you should see 1 alert: colorado
  5. click "set combobox value" button again
  6. you should see 2 alerts: maryland, pennsylvania

maybe i'm misunderstanding event, why behavior? why using setvalue deselect states (that i'm setting) combobox, still have them selected when open combobox? , why first test case show 4 alerts?

update

looking @ syncselection code, looks deselectall called on selection model, explain why beforedeselect event called, selection model calls select... doesn't explain why selection event not called.

ext.onready(function() {     var store = ext.create('ext.data.store', {         fields: ['state_id', 'state_name'],         data: [             {state_id: 1, state_name: 'colorado'},             {state_id: 2, state_name: 'maryland'},             {state_id: 3, state_name: 'pennsylvania'}         ]     });     var combo = ext.create('ext.form.field.combobox', {         valuefield: 'state_id',         displayfield: 'state_name',         store: store,         multiselect: true,         value: [1],         listeners: {             beforedeselect: function(combo, record, index, eopts) {                 alert('deselected: ' + record.get('state_name'));             },             beforeselect: function() {                 alert('selected');             }         },         renderto: ext.getbody()     });     var button = ext.create('ext.button.button', {         text: 'set combobox value',         listeners: {             click: function() {                 combo.setvalue([2, 3]);             }         },         renderto: ext.getbody()     }); }); 

cross-post sencha forums.

i've come solution, i'm unsure of repercussions... far, haven't seen any. override combobox's syncselection method following:

syncselection: function() {     var me = this,         picker = me.picker,         selection, selmodel,         values = me.valuemodels || [],         vlen  = values.length, v, value;      if (picker) {       // value, find models in store's current data       selection = [];       (v = 0; v < vlen; v++) {         value = values[v];          if (value && value.ismodel && me.store.indexof(value) >= 0) {           selection.push(value);         }       }        // update selection match       me.ignoreselection++;       selmodel = picker.getselectionmodel();       selmodel.deselectall(true);  // key all... suppressing event listener, what's happening in select right below       if (selection.length) {         selmodel.select(selection, undefined, true);       }       me.ignoreselection--;     }   } 

the change deselectall call... it's suppressing deselect event that's fired, select event follows it... i'm curious know why don't suppress event in select. said, i'm not sure of repercussions, it's given me great mileage far.


Comments

Popular posts from this blog

php - render data via PDO::FETCH_FUNC vs loop -

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

The canvas has been tainted by cross-origin data in chrome only -