/** * 定义store,在baseParams中定义参数,请求服务端数据,返回数据源 */ var modelsStore = new Ext.data.JsonStore({ url : 'cars-makes-models.action', baseParams : { cmd : 'models' }, root : 'models', fields : ['id', 'name'] }); /** * * makeCombo 父类combox 控制自身store的加载, 以及modelStore的加载 通过select触发事件,去级联modelStore */ var MakeCombo = { xtype : 'combo', store : makestore, displayField : 'name', valueField : 'id', typeAhead : true, editable : false, mode : 'remote', forceSelection : true, triggerAction : 'all', fieldLabel : 'Make', emptyText : 'Select a make...', selectOnFocus : true, anchor : '95%', store : new Ext.data.JsonStore({ url : 'cars-makes-models.action', baseParams : { cmd : 'makes' }, root : 'makes', fields : ['id', 'name'] }), listeners : { 'select' : function(cmb, rec, idx) { // 得到models-combo组件 modelsCbx = Ext.getCmp('models-combo'); // 清除数据 modelsCbx.clearValue(); // 通过传入自身参数使modelStore重新加载 modelsCbx.store.load({ params : { 'makeId' : this.getValue() } }); // 启用组件 modelsCbx.enable(); } } }; /** * 子类combox 注意这里的mode是定义为local(按常理是remote) 原因是不让这个组件在没有级联的关系下加载数据 */ var ModelCombo = { xtype : 'combo', id : 'models-combo', store : modelsStore, displayField : 'name', valueField : 'id', typeAhead : true, editable : false, mode : 'local', forceSelection : true, triggerAction : 'all', fieldLabel : 'Model', emptyText : 'Select a model...', selectOnFocus : true, disabled : true, anchor : '95%' }; /** * 初始化面板 */ Ext.onReady(function() { var newCarForm = new Ext.FormPanel({ frame : true, title : 'Car Reviews', bodyStyle : 'padding:5px', width : 420, id : 'make-selector-frm', url : 'new-car.php', items : [MakeCombo, ModelCombo] }); newCarForm.render(document.body); });