/** * v1.2.2 2012-05-07 * author: Mac_J, 文●定天下 */ Ext.define('Ext.ux.view.GridComboBoxList', { extend : 'Ext.view.AbstractView', alias : 'widget.gridcombolist', alternateClassName : 'Ext.GridComboBoxList', // 2012-05-07 Ext4.1下的Bug的解决 renderTpl : [ '
' ], //renderTpl : [ '
' ], initComponent : function() { var me = this; // 2012-05-07 Ext4.1下的Bug的解决 me.itemSelector = "div.list-ct"; //me.itemSelector = "."; me.tpl = Ext.create('Ext.XTemplate'); me.callParent(); Ext.applyIf(me.renderSelectors, { listEl : '.list-ct' }); me.gridCfg.border = false; me.gridCfg.store = me.store; me.grid = Ext.create('Ext.grid.Panel', me.gridCfg); me.grid.store.addListener({ beforeload : function() { me.owner.loading = true; }, load : function() { me.owner.loading = false; } }); var sm = me.grid.getSelectionModel(); sm.addListener('selectionchange', function(a, sl) { var cbx = me.owner; if (cbx.loading) return; var sv = cbx.multiSelect? cbx.getValue():{}; // sv = {} var EA = Ext.Array, vf = cbx.valueField; // al = [ 'G', 'Y', 'B' ] var al = EA.map(me.grid.store.data.items, function(r) { return r.data[vf]; }); var cs = EA.map(sl, function(r) { var d = r.data; if(d){ var k = d[vf]; sv[k] = d; return k; } }); // cs = [ 'G' ] var rl = EA.difference(al, cs); EA.each(rl, function(r) { delete sv[r]; }); cbx.setValue(sv); }); sm.addListener('select', function(m, r, i) { var cbx = me.owner; if (cbx.loading) return; if(!cbx.multiSelect) cbx.collapse(); }); }, onRender : function() { this.callParent(arguments); this.grid.render(this.listEl); }, bindStore : function(store, initial) { this.callParent(arguments); if(this.grid) this.grid.bindStore(store, initial); }, onDestroy : function() { Ext.destroyMembers(this, 'grid', 'listEl'); this.callParent(); } });