A quoi peut bien servir le fait de relayer les événements ?
Et bien c'est un concept plutôt pratique qui permet qu'un évènement déclenché dans un objet A puisse être écouté par un objet B, ces deux objets étant relativement indépendants. Plus concrètement dans l'exemple présenté ici le clique sur une ligne de mon tableau doit déclencher la mise à jour du contenu d'un panel.
Et c'est là que je vous propose un petit exemple que vous retrouverez ici en mode dépouillé :
Voici donc un petit script.js :
Ext.onReady(function() { var panel = new Ext.Panel({ region:"north" ,margins:"5" ,html:"birth date: " ,bodyStyle:{padding:"0 2px"} ,listeners:{ rowselect:function(selectionModel, rowIndex, record) { this.body.update("birth date: " + record.data.birth_date); this.body.highlight("#c3daf9", {block:true}); } } }); var grid = new Ext.grid.GridPanel({ region:"center" ,margins:"0 5 5 5" ,enableHdMenu:false ,autoExpandColumn:"last_name" ,store:new Ext.data.ArrayStore({ fields:["first_name", "last_name", "birth_date"] ,data:[ ["john", "smith", "12/07/1962"] ,["steve", "brown", "24/11/1971"] ] }) ,columns:[ {header:"First name", dataIndex:"first_name"} ,{id:"last_name", header:"Last name", dataIndex:"last_name"} ] }); new Ext.Panel({ renderTo:"foo" ,title:"Panel" ,width:200 ,height:130 ,style:"margin:0 auto" ,layout:"border" ,layoutConfig:{padding:"5", align:"stretch"} ,defaults:{margins:"0 0 5px 0"} ,items:[panel, grid] ,listeners:{ render:function() { panel.relayEvents(grid.getSelectionModel(), "rowselect"); } } }); });
Avec le fichier HTML qui va bien :
<html> <head> <link rel="stylesheet" type="text/css" href="/ext-3.0.3/resources/css/ext-all.css" /> <script type="text/javascript" src="/ext-3.0.3/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="/ext-3.0.3/ext-all-debug.js"></script> <script type="text/javascript" src="/script.js"></script> <head> <body> <div id="foo"></div> </body> </html>