L'utilisation des "ref" d'ExtJS permet d'obtenir une référence à un objet qui aurait été déclaré implicitement. ExtJS autorise la déclaration d'objet en "lazzy mode", une façon de décrire un objet et ses enfants sous la forme d'une arborescence. Cette technique en plus d'optimiser le processus de construction des objets, donne un ratio code/rendu très bas. Idéal pour les flemmards et les pressés. A consommer avec modération si on ne veut pas basculer du coté des crados.
Et c'est là que je vous propose un petit exemple que vous retrouverez ici en mode dépouillé :
Voici ce que peut donner le contenu d'un fichier script.js:
Ext.onReady(function() { 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:[{ region:"north" ,ref:"panel" ,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}); } } }, { region:"center" ,xtype:"grid" ,ref:"grid" ,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"} ] }] ,listeners:{ afterrender:function() { this.panel.relayEvents(this.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>
Ce qu'il faut noter c'est qu'à la ligne 14 et à la ligne 27 du JavaScript on peut voir l'ajout d'une référence à un panel et à un grid sous la forme:
ref:"panel" ref:"grid"
et son utilisation à la ligne 41:
this.panel.mypanel.relayEvents(this.panel.mygrid.getSelectionModel(), "rowselect");