47
Curso de Ext JS CAP.1. Conceptos fundamentales ................................................................................. 3 1.1 DOM................................................................................................................... 3 1.2 DHTML .............................................................................................................. 4 1.3 CSS ..................................................................................................................... 4 1.4 JavaScript ............................................................................................................ 4 1.5 AJAX .................................................................................................................. 5 1.5.1 El objeto XMLHttpRequest .......................................................................... 6 1.6 XML ................................................................................................................... 7 1.7 RIA ..................................................................................................................... 8 1.8 JSON................................................................................................................... 9 1.9 jQuery ................................................................................................................. 9 1.10 Prototype ......................................................................................................... 10 CAP.2. Introducción a ExtJS ....................................................................................... 11 2.1 Un poco de historia ........................................................................................... 11 2.2 ¿Qué es exactamente ExtJS?.............................................................................. 11 2.3 ExtJS es asíncrono............................................................................................. 11 CAP.3. Empezando a usar ExtJS ................................................................................. 12 3.1 Descargando la librería ExtJS ............................................................................ 12 3.2 ¿Dónde y cómo instalarlo? ................................................................................ 12 3.3 Documentación ExtJS ....................................................................................... 12 3.4 Construyendo el proyecto .................................................................................. 12 3.4.1 La primera librería con ExtJS ..................................................................... 13 3.5 Spacer image ..................................................................................................... 14 3.6 Probemos los idiomas ........................................................................................ 14 3.7 Algo un poco más complicado ........................................................................... 15 3.8 JSON y el objeto de configuración .................................................................... 16 3.8.1 La manera antigua ...................................................................................... 16 3.8.2 La nueva forma de configurar objetos ......................................................... 16 3.8.3 ¿Qué es el objeto de configuración? ............................................................ 17 3.8.4 Como funciona JSON ................................................................................. 18 3.9 Modificando el ejemplo anterior ........................................................................ 18 3.9.1 Encendiendo el fuego ................................................................................. 19 CAP.4. Panels y TabPanels ......................................................................................... 21 4.1 Panel ................................................................................................................. 21 4.1.1 Elaboración de Panels ................................................................................. 21 4.2 TabPanel ........................................................................................................... 21 4.2.1 Construyendo nuestro primer TabPanel ...................................................... 21 4.2.2 Manejo de Tabs, métodos que debes conocer .............................................. 22 CAP.5. Viewports, layouts y regions ........................................................................... 23 5.1. Viewports......................................................................................................... 23 5.2 Layouts ............................................................................................................. 23 5.2.1 FitLayout .................................................................................................... 23 5.2.2 BorderLayout ............................................................................................. 23 5.2.3 Accordion ................................................................................................... 25 5.2.4 CardLayout................................................................................................. 26 5.2.5 TableLayout ............................................................................................... 27 5.2.6 AnchorLayout............................................................................................. 28

curso extjs

Embed Size (px)

Citation preview

  • CursodeExtJS

    CAP.1.Conceptosfundamentales ................................................................................. 31.1DOM................................................................................................................... 31.2DHTML.............................................................................................................. 41.3CSS..................................................................................................................... 41.4JavaScript............................................................................................................ 41.5AJAX.................................................................................................................. 51.5.1ElobjetoXMLHttpRequest .......................................................................... 6

    1.6XML ................................................................................................................... 71.7RIA..................................................................................................................... 81.8JSON................................................................................................................... 91.9jQuery ................................................................................................................. 91.10Prototype......................................................................................................... 10

    CAP.2.IntroduccinaExtJS....................................................................................... 112.1Unpocodehistoria........................................................................................... 112.2QuesexactamenteExtJS?.............................................................................. 112.3ExtJSesasncrono............................................................................................. 11

    CAP.3.EmpezandoausarExtJS................................................................................. 123.1DescargandolalibreraExtJS............................................................................ 123.2Dndeycmoinstalarlo? ................................................................................ 123.3DocumentacinExtJS ....................................................................................... 123.4Construyendoelproyecto .................................................................................. 123.4.1LaprimeralibreraconExtJS ..................................................................... 13

    3.5Spacerimage..................................................................................................... 143.6Probemoslosidiomas........................................................................................ 143.7Algounpocomscomplicado........................................................................... 153.8JSONyelobjetodeconfiguracin .................................................................... 163.8.1Lamaneraantigua ...................................................................................... 163.8.2Lanuevaformadeconfigurarobjetos......................................................... 163.8.3Queselobjetodeconfiguracin?............................................................ 173.8.4ComofuncionaJSON ................................................................................. 18

    3.9Modificandoelejemploanterior........................................................................ 183.9.1Encendiendoelfuego................................................................................. 19

    CAP.4.PanelsyTabPanels ......................................................................................... 214.1Panel ................................................................................................................. 214.1.1ElaboracindePanels................................................................................. 21

    4.2TabPanel ........................................................................................................... 214.2.1ConstruyendonuestroprimerTabPanel ...................................................... 214.2.2ManejodeTabs,mtodosquedebesconocer.............................................. 22

    CAP.5.Viewports,layoutsyregions........................................................................... 235.1.Viewports......................................................................................................... 235.2Layouts ............................................................................................................. 235.2.1FitLayout.................................................................................................... 235.2.2BorderLayout ............................................................................................. 235.2.3Accordion................................................................................................... 255.2.4CardLayout................................................................................................. 265.2.5TableLayout ............................................................................................... 275.2.6AnchorLayout............................................................................................. 28

  • CAP.6.Ventanasydilogos........................................................................................ 306.1Elayeryelhoyconventanas ............................................................................ 306.2Dilogos............................................................................................................ 306.2.1Alert ........................................................................................................... 306.2.2Prompt........................................................................................................ 316.2.3Confirmation .............................................................................................. 326.2.4Progress...................................................................................................... 326.2.5Show .......................................................................................................... 336.2.6ComportamientogeneraldeShow .............................................................. 34

    6.3Ventanas ........................................................................................................... 356.3.1Empezando................................................................................................. 356.3.2Unpanelconpotencia................................................................................ 366.3.3Layout ........................................................................................................ 366.3.4Limpiandoventanas.................................................................................... 376.3.5Losextras ................................................................................................... 386.3.6Funcionandodentrodeunescritorio ........................................................... 386.3.7Otrasopciones ............................................................................................ 386.3.8Manipulacin.............................................................................................. 396.3.9Eventos....................................................................................................... 40

    CAP.7.Toolbars,BotonesyMens............................................................................. 417.1Creacindebarras............................................................................................. 417.1.1Toolbars ..................................................................................................... 417.1.2Botn.......................................................................................................... 417.1.3Men .......................................................................................................... 427.1.4Botnsplit .................................................................................................. 437.1.5Alineacin,divisoresyespacios ................................................................. 437.1.6Accesosdirectos ......................................................................................... 437.1.7Botonesdeiconos....................................................................................... 447.1.8Manejadoresdebotones.............................................................................. 447.1.9Cargarcontenidoconelclicdeunbotn .................................................... 45

    Referenciabibliogrfica .............................................................................................. 46ReferenciasdeInternet................................................................................................ 47

  • CAP.1.Conceptosfundamentales

    1.1DOM

    El DOMDocumentObjectModel, es una plataforma neutral que permite a los programas yscripts acceder y actualizar dinmicamente el contenido, la estructura y el estilo de losdocumentos. Esta estructura de objetos es generada por el navegador cuando se carga undocumento.

    Desdeelpuntodevistadeldesarrollodepginasweb,elDOMnosindicaculeslanaturalezadelaestructuradelosdocumentosynosproveedeunaseriederecursosparapoderaccederatodossuselementos,alarelacinqueexisteentreellos,asuscaractersticas,susmodosderepresentacinyloseventosquesoportan.

    ElDOMtienevarioselementos,cadaunoseencuentradentrodeuna jerarqua, tantoHTMLcomoXMLtienencomobaseunaestructuradentrodelacualsedefinenlosnodosquepuedenserdeinformacinenelcasodelXMLydeobjetosenelcasodeHTML.

    EstructuraHTML:

    Relacinentrenodos:

    Ejemplo: En el caso de un input, se puede acceder a sus propiedades o caractersticasnavegandoporsujerarqua,apartirdedocument>forms[0]:

  • Paraaccederalvalordelinput:

    document.forms[0].caja.value

    1.2DHTML

    ElHTMLDinmico(DHTML),noesmsqueunaformadeaportarinteractividadalaspginasweb,quetienelaventajadepodercrearefectosquerequierenpocoanchodebandaalahoradeejecutarseysonestosefectoslosqueaumentanlafuncionalidadalapgina,queconsoloHTMLsimpleseraimposiblederealizar.AunquemuchasdelascaractersticasdelDHTMLsepodranduplicarconotrasherramientascomoJavaoFlash,elDHTMLofrecelaventajadequenorequiereningntipodepluginparapoderutilizarlo.

    Aunque las tecnologas en las que se basa el DHTML (HTML, CSS, JavaScript) estnestandarizadas,laformaenqueseimplementanenlosvariosnavegadores,difiereentres.

    Por este motivo, la creacin de pginas web que usen esta tecnologa, puede llegar aconvertirse en una tarea muy compleja, puesto que hay que conseguir que la pgina sevisualiceperfectamenteentodoslosnavegadores.

    1.3CSS

    Esunmecanismosimpleparaaadirestilos(fonts,colors,spacing)alosdocumentosWeb.

    La idea que se encuentra detrs del desarrollo de CSS es separar la estructura de undocumentodesupresentacin.

    Ejemplo:

    position :absoluteleft :50pxtop :100pxwidth :200pxheight :100pxclip :rect(0px200px100px0px)visiblity :visiblezindex :1backgroundcolor :#FF0000layerbackgroundcolor :#FF0000backgroundimage :URL(icono.gif)layerbackgroundimage :URL(icono.gif)

    1.4JavaScript

    JavaScriptesun lenguajedeprogramacin interpretado(scripting),esdecir,quenorequierecompilacin, utilizado principalmente en pginas web, con una sintaxis semejante a la dellenguajeJava.

    NoesunlenguajedeProgramacinOrientadaaObjetospropiamentedichocomoJava,perograciasaqueesbasadoenprototipos,sepuedeaplicarconceptosdeprogramacinorientadaaobjetos.

    Ejemplo:

  • functionfEnviaAlerta(){

    vartexto=document.forms[0].caja.valuealert(texto)

    }

    1.5AJAX

    Ajax,acrnimodeAsynchronousJavaScriptAndXML (JavaScriptasncronoyXML),es unatcnica de desarrollo web para crear aplicaciones interactivas o RIA (Rich InternetApplications). Estas aplicaciones se ejecutan en el cliente, es decir, en el navegador de losusuariosmientrassemantienelacomunicacinasncronaconelservidorensegundoplano.

    Deesta formaesposiblerealizarcambiossobre laspginassinnecesidadderecargarlas, loquesignificaaumentarlainteractividad,velocidadyusabilidadenlasaplicaciones.

    Ajaxesuna tecnologaasncrona,enelsentidodeque losdatosadicionalesserequierenalservidorysecarganensegundoplanosin interferircon lavisualizacinnielcomportamientodelapgina.JavaScriptesellenguajeinterpretado(scriptinglanguage)enelquenormalmentese efectan las funcionesde llamadadeAjaxmientras queelacceso a los datos se realizamedianteXMLHttpRequest,objetodisponibleenlosnavegadoresactuales.Encualquiercaso,noesnecesarioqueelcontenidoasncronoestformateadoenXML.

    Ajax es una tcnica vlida para mltiples plataformas y utilizable en muchos sistemasoperativos y navegadores dado que est basado en estndares abiertos como JavaScript yDocumentObjectModel(DOM).

    Laconversacintradicionalentreelclienteyelservidoresenserie,secargaunasolapginaalavez,comoseexplicaenlasiguienteimagen:

    La interaccinAJAXentreel clienteyel servidores asncrona,esdecirdentrode lamismapginaserealizalasolicitudyentregaderespuesta,graciasalobjetoXMLHttpRequest,comosemuestraenlasiguienteimagen:

  • ElprocesodeunaaplicacinAJAXserveradelasiguienteforma,comomuestralaimagen:

    1.5.1ElobjetoXMLHttpRequest

  • Su objetivo es hacer peticiones asncronas al servidor, es la columnavertebral de todas lasaplicaciones AJAX. Est admitido por todos los navegadores.Microsoft lo introdujo en IE 5comounobjetoActiveX.

    Propiedades:

    Propiedades Descripcinonreadystatechange DeterminaquefuncinserllamadacuandolapropiedadreadyStatedel

    objetocambie.Nmeroenteroqueindicaelstatusdelapeticin:0=Noiniciada1=Cargando2=Cargado3=Interactivo

    readyState

    4=CompletadoresponseText DatosdevueltosporelservidorenformadestringdetextoresponseXML Datosdevueltosporelservidorexpresadoscomounobjetodocumento.

    CdigoestatusHTTPdevueltoporoelservidor:200=OK(Peticincorrecta)204=NoContent(Documentosindatos)301=MovedPermanently(RecursoMovido)401=NotAuthorized(Necesitaautenticacin)403=Forbidden(Rechazadaporservidor)404=NotFound(Noexisteenservidor)408=RequestTimeout(Tiemposobrepasado)

    status

    500=ServerError(Errorenelservidor)

    Mtodos:

    Propiedades Descripcinabort() Detienelapeticinactual.getAllResponseHeaders() Devuelvetodaslascabecerascomounstring.getResponseHeader(x) Devuelveelvalordelacabeceraxcomounstring.open(method,URL,a) EspecificaelmtodoHTTP(porejemplo,GEToPOST),la

    URLobjetivo,ysilapeticindebesermanejadaasncronamente(Si,a=TruedefectoNo,a=false.)

    send(content) EnvalapeticinsetRequestHeader(label,value) Configuraunparparmetroyvalorlabel=valueyloasigna

    alacabeceraparaserenviadoconlapeticin.

    1.6XML

    XML,siglaseninglsdeeXtensibleMarkupLanguage(lenguajedemarcasextensible),esunmetalenguajeextensibledeetiquetasdesarrolladoporelWorldWideWebConsortium(W3C).Es una simplificacin y adaptacin del SGML y permite definir la gramtica de lenguajesespecficos(delamismamaneraqueHTMLesasuvezunlenguajedefinidoporSGML).PorlotantoXMLnoesrealmenteunlenguajeenparticular,sinounamaneradedefinirlenguajesparadiferentesnecesidades.AlgunosdeestoslenguajesqueusanXMLparasudefinicinsonXHTML,SVG,MathML.

    XMLnohanacidosloparasuaplicacinenInternet,sinoqueseproponecomounestndarparaelintercambiodeinformacinestructuradaentrediferentesplataformas.Sepuedeusarenbasesdedatos,editoresdetexto,hojasdeclculoycasicualquiercosaimaginable.

  • XMLesunatecnologasencillaquetieneasualrededorotrasquelacomplementanylahacenmuchomsgrandeyconunasposibilidadesmuchomayores.Tieneunpapelmuyimportanteenlaactualidadyaquepermitelacompatibilidadentresistemasparacompartirlainformacindeunamanerasegura,fiableyfcil.

    Ejemplo:

    125

    1.7RIA

    Son aplicaciones web que tienen la mayora de las caractersticas de las aplicaciones deescritorio tradicionales, estas aplicaciones utilizan un navegador web estandarizado paraejecutarse y por medio de un plugin o independientemente con una virtual machine, seagreganlascaractersticasadicionales.Esta surge como una combinacin de las ventajas que ofrecen las aplicacionesWeb y lasaplicacionestradicionales.Buscanmejorarlaexperienciadelusuario.NormalmenteenlasaplicacionesWeb,hayunarecargacontinuadepginascadavezqueelusuariopulsasobreunenlace.Deestaformaseproduceuntrficomuyaltoentreelclienteyelservidor,llegandomuchasveces,arecargarlamismapginaconunmnimocambio.EnlosentornosRIA,encambio,noseproducenrecargasdepgina,yaquedesdeelprincipiose carga toda la aplicacin, y slo se produce comunicacin con el servidor cuando senecesitandatosexternoscomodatosdeunaBasedeDatosodeotrosficherosexternos.

    Ejemplo:UnejemplomuybuenodeRIAeseldesktopcreadoporelExtJSteamqueutilizaunmenmuyparecidoaldelsistemaoperativoWindows,tieneconosenelescritorioydespliegaventanasquesepuedenmover,cerrarycambiardetamao.

  • 1.8JSON

    JSON, acrnimo de JavaScriptObjectNotation, esun formato ligero para el intercambio dedatos.JSONesunsubconjuntodelanotacinliteraldeobjetosdeJavaScriptquenorequiereelusodeXML.La simplicidad de JSON ha dado lugar a la generalizacin de su uso, especialmente comoalternativaaXMLenAJAX.UnadelassupuestasventajasdeJSONsobreXMLcomoformatodeintercambiodedatosenestecontextoesqueesmuchomssencilloescribirunanalizadorsemntico de JSON. En JavaScript, un texto JSON se puede analizar fcilmente usando elprocedimientoeval(),locualhasidofundamentalparaqueJSONhayasidoaceptadoporpartede la comunidad de desarrolladores AJAX, debido a la ubicuidad de JavaScript en casicualquiernavegadorweb.

    Ejemplo:

    ({

    "total":"2","results":[{

    "id_genero":"F","descripcion_genero":"Femenino"

    },{

    "id_genero":"M","descripcion_genero":"Masculino"

    }]})

    1.9jQuery

    jQueryesunabibliotecaoframeworkdeJavaScript,creada inicialmenteporJohnResig,quepermite simplificar la manera de interactuar con los documentos HTML, manipular el rbolDOM,manejareventos,desarrollaranimacionesyagregarinteraccinconlatecnologaAJAXapginasweb.Fuepresentadael14deenerode2006enelBarCampNYC.

  • jQueryessoftwarelibreydecdigoabierto,poseeundoblelicenciamientobajolaLicenciaMITylaLicenciaPblicaGeneraldeGNUv2,1permitiendosuusoenproyectoslibresyprivativos.2jQuery, al igual que otras bibliotecas, ofrece una serie de funcionalidades basadas enJavaScriptquedeotramanerarequerirandemuchomscdigo,esdecir,conlasfuncionespropiasdeestabibliotecaselograngrandesresultadosenmenostiempoyespacio.

    Ejemplo:

    jQuery().ready(function(){jQuery("#list1").jqGrid({

    url:'server.php?q=1',datatype:"xml",colNames:['InvNo','Date','Client','Amount','Tax','Total','Notes'],colModel:[

    {name:'id',index:'id',width:75},{name:'invdate',index:'invdate',width:90},{name:'name',index:'name',width:100},{name:'amount',index:'amount',width:80,align:"right"},{name:'tax',index:'tax',width:80,align:"right"},{name:'total',index:'total',width:80,align:"right"},{name:'note',index:'note',width:150,sortable:false}

    ],rowNum:10,autowidth:true,rowList:[10,20,30],pager:jQuery('#pager1'),sortname:'id',viewrecords:true,sortorder:"desc",caption:"XMLExample"

    }).navGrid('#pager1',{edit:false,add:false,del:false})

    1.10Prototype

    Prototype es un framework escrito en JavaScript que se orienta al desarrollo sencillo ydinmico de aplicaciones web. Es una herramienta que implementa las tcnicas AJAX y supotencialesaprovechadoalmximocuandosedesarrollaconRubyOnRails.

    ConlaWeb2.0lastcnicasdedesarrollodepginaswebnecesitabandarungransalto.Conesto en mente naci la tcnica AJAX, que gracias a Prototype permite el desarrollo gil ysencillodepginasWeb,estoenrelacinaldesarrollador,yproveealclienteunamaneramsrpidadeaccederalservicioquesolicita.PrototypeesunFrameworkbasadoenJavasScriptorientadoaproporcionaraldesarrolladordetcnicasAJAXlistasparaserusadas.ElpotencialdePrototypeesaprovechadoalmximosi se desarrollaconRubyOnRails,esto noquieredecir que no se puede usar desde otro lenguaje, solamente que demandara un "mayoresfuerzo"eneldesarrollo.

    Ejemplo:

    varnombre=$F('nameUser')varapellido=$F('surnameUser')vardireccion=$F('directionUser')

    varparam='name='+nombre+'&surname='+apellido+'&direction='+direccion

    varurl='paginaReceptora.php'

    varajaxRequest=newAjax.Request(url,{

    method:'get',parameters:param,asynchronous:true,onComplete:showResponse

    })

  • CAP.2.IntroduccinaExtJS

    2.1Unpocodehistoria

    ExtJSfueoriginalmenteconstruidacomounaextensinde labibliotecaYUI,en laactualidadpuede usarse como extensin para las bibliotecas jQuery yPrototype.Desde la versin 1.1puedeejecutarsecomounaaplicacinindependiente.

    2.2QuesexactamenteExtJS?

    ExtJSesunabibliotecaoconjuntodelibrerasdeJavaScriptparaeldesarrollodeaplicacioneswebinteractivas,usatecnologasAJAX,DHTMLyDOM.

    ExtJSpermite realizar completas interfaces de usuario, fciles de usar,muy parecidas a lasconocidasaplicacionesdeescritorio.Estopermitealosdesarrolladoreswebconcentrarseenlafuncionalidaddelasaplicacionesenvezdeenlasadvertenciastcnicas.

    2.3ExtJSesasncrono

    La programacin tradicional para Internet, o tambin llamadaWeb 1.0 ejecuta el cdigo ensucesin,esdeciresperaaqueunalneadecdigosecompleteantesdeejecutarlasiguiente.Al igual quela construccin de unacasa,los cimientosdeben sercompletadosantes de quelasparedesse puedanconstruir,acontinuacin,lasparedesdebenestarcompletasantesdequeeltechoseaconstruido.

    ConExtJS,queesunaherramientatipoWeb2.0,podemosfcilmenteempezarporeltechodelacasaantesqueloscimientosestnconstruidos.Esalgoascomoimaginarsequeeltechode la casa est siendo construido en una fbrica, mientras al mismo tiempo, se estnconstruyendoloscimientosylasparedesycuandotodoestlisto,simplementesearmatodomsrpido.

    Estonospresentaotrascosasqueantesnosolamostener,ahorayanoestamosobligadosatomarelenfoquelneaporlneadeldesarrolloweb.ExtJSnosayudaasalirpormediodeeventosymanejadoresquepodemospegaranuestrafuncionalidad.

    Estamaneradehacerlascosassedenominaasincrona.

  • CAP.3.EmpezandoausarExtJS

    3.1DescargandolalibreraExtJS

    Sedebeingresaralsitiowww.sencha.com. EscogerelframeworkExtJS. HacerclicenelbotnDownloaddecolorverde. Y para el curso vamos a bajar la versin Open Source haciendo clic en el botn

    Downloaddecolorceleste.

    3.2Dndeycmoinstalarlo?

    ElpaqueteExtJS,noseinstala,yaqueesunSDKquecontieneunconjuntodearchivosquecomprendenlosrecursosqueExtJSnecesitaparacorreradecuadamente.Vienedentrodeunarchivo comprimido, el mismo que vamos a descomprimir dentro de la carpeta principal denuestro servidor de pginas dinmicas favorito, en este caso lo haremos dentro deApache>htdocs>aplicacin,unavezcopiadoeldirectorioquecontiene las librerasdeExtJS,cambiemoselnombredelacarpetaaextjssimplemente.

    ElSDKsecomponedelassiguientescarpetasyarchivosimportantes:

    Tipo Nombre Descripcin

    Directorio adapter ArchivosquepermitenusarotraslibrerasdentrodeExtJS

    Directorio docs LadocumentacincompletadetodosloscomponentesdeExtJS(solocorreenunservidorweb)Directorio examples Cientosdeasombrososytilesejemplos

    Directorio pkgsPaquetesadicionalesaloscomponentesoriginalesqueloshacenmsfuertes,incluyetambinalgunosnuevosobjetos

    Directorio resources DependenciasdelaslibrerasdeExtJS,talescomoarchivosCSSeimgenesDirectorio src ElcdigofuentecompletedeExtJS

    Archivo extall.css EselarchivoCSSprincipaldeExtJS,eselencargadodequeloscomponentesseveantanbienArchivo extall.js EslaliberaprimariadeExtJS

    3.3DocumentacinExtJS

    Dentro del paquete de librerasExtJS, viene incluida la documentacin, a la cual podremosaccederdesdecualquierexploradorwebcolocandolasiguientedireccinlocal:

    http://localhost/aplicacion/extjs/docs/

    Aslatendremosamanoporcualquierdudaquesepresente.

    Ejercicio:Explorardocumentacin

    3.4Construyendoelproyecto

    http://www.sencha.com/http://localhost/aplicacion/extjs/docs/
  • Dentrodelacarpetacreadaenhtdocs,aplicacion,vamosacrearlassiguientescarpetasparaorganizarmejornuestroproyecto:

    imagenes librerias estilos

    Finalmentevamosacrearunarchivoen la razdenuestracarpeta aplicacion,denominadoindex.html,dentrodelcualvamosa llamaralas librerasquesonnecesariasparaque incluirExtJSenelproyecto:

    Aplicacion

  • Analizandoelejemploactualtenemoslosiguiente:

    Ext.onReady:EstafuncinhacequenuestrocdigoespereantesdequeelDOMestdisponible.EstosenecesitaporqueelJavaScriptempiezaejecutandotanprontocomoesencontradoeneldocumento,momentoenelcualnuestroselementosDOMpodrannoexistir.

    Ext.Msg:Esta eslafuncinprincipalusadaparalacreacindeunaalerta,yaqueseocupadetodolonecesarioparateneruncuadrodedilogocompleto.

    3.5Spacerimage

    Antesdecontinuar,debemosproveeraExtJSconalgoquenecesita,unaimagen,quesehadenominadospacer image,debidoaqueExtJSnecesita tener lamedidadeunpxelporunpixel transparente,paradarunanchofijoasuscomponentes.Sedebe indicarlalocacindeestaimagenusandolasiguientelnea:

    Ext.BLANK_IMAGE_URL='images/s.gif'

    SiempresecolocacomoprimeralneadentrodeleventoonReady.

    La idea de utilizar una spacer image, es porque la interface de usuario deExtJS es creadausandoCSS,peroelCSSnecesitaelementosHTMLfundamentalesparacrearelestiloquelesda la apariencia actual a los componentes deExtJS.El nico elementoHTMLque tiene untamaoexactoyprevisibleentodoslosnavegadoresenunaimagen.Asqueestaimagenesusadaparadefinirlaformacomoloscomponentessondibujados.EsascomoExtJSmantienelacompatibilidadconlamayoradenavegadoresweb.

    Ejercicio:Aadirspacerimagealejemploanterior.

    3.6Probemoslosidiomas

  • ExJSesmultiidioma,elidiomapordefaultesingls,paracambiarlosolonecesitamosaadirlalibreracorrespondientealidiomadeseado,esasqueparaespaolusaremos:

    Estadeclaracindebecolocarseantesdelaslibreraspropias.

    Ejercicio:Colocarlalibreraenelindex.htmlycorrerelejemploconlalibreraysinlalibreraparaverquesucede.

    3.7Algounpocomscomplicado

    Vamosacrearunejemplomscomplicado,utilizandootroselementosdeExt.Msg,paraloculcreamos un archivo denominado pregunta.js en el directorio de nuestras librerias, con elsiguientecdigo:

    Ext.onReady(function(){

    Ext.BLANK_IMAGE_URL='images/s.gif'Ext.Msg.show({

    title:'Javier',msg:'Hasvistomicomputadora?',buttons:{

    yes:true,no:true,cancel:true

    }})

    })

    Conestecdigocreamosuncuadrodedilogoconunttulodefinidoycuyomensajeprincipalesunapregunta,ademslecolocamostresbotonescomoopcionesderespuesta.

    El argumento pasado a onReady es una funcin, que puede ser pasada con un nombredefinido,ocreadaenlneacomoenestecaso.Estemtododecrearunafuncinenlneasedenominacomounafuncinannima,queesusadaparallamarunafuncinparticularsolounavez.

    Siestuviramosusandouna funcinquepuedaser reultizada,entoncesdeberamosdefinirladeestaforma:

    functionfDondeEsta(){

    Ext.Msg.show({

    title:'Javier',msg:'Hasvistomicomputadora?',buttons:{

    yes:true,no:true,cancel:true

    }})

    }

    Ext.onReady(function(){

    Ext.BLANK_IMAGE_URL='images/s.gif'fDondeEsta()

    })

  • Si estamos pensando realizar una aplicacin grande, es buena idea hacer funcionesreutilizables.

    Tambinsepuedenhacercambiosenlaconfiguracindeloscomponentes,colocandoestilospropios.Yesposible incluirunafuncinparaqueseejecutealhacerclicen losbotonesdelcuadrodedilogo,delasiguienteforma:

    1. Sedebecrearunarchivodeestilos,denominadoestilos.cssen lacarpetaestilosdelproyecto.

    2. Colocarenelarchivounestilopropiocomoelsiguiente:.personaicon{

    background:url(../imagenes/ico_persona_flecha.gif)norepeat}

    3. Colocarelestilocreadoenlapropiedadicondelcuadrodedigolo:icon:'personaicon',

    4. Crear una funcin annima asociada a la propiedad fn del cuadro de dilogo, estafuncin hara que aparezca una alerta indicando cual fue el botn que presion elusuario:

    fn:function(btn){

    Ext.Msg.alert('Javierhizoclicen',btn)}

    3.8JSONyelobjetodeconfiguracin

    Ennuestrosejemplos,hemosusadoalgoquesedenominaobjetodeconfiguracin,queeslaformaprincipal dehacerqueExtJShaga loquenosotrosqueremos.Estopermite realizar laconfiguracindelasdiferentesopcionesqueestndisponiblesparacualquierfuncinqueestsiendousada.

    3.8.1Lamaneraantigua

    Antes solamos llamar a las funciones con un set de argumentos predeterminados.Es decirquedebamosrecordarelordendelosargumentoscadavezquelafuncinseausada.

    varprueba=newFuncionPrueba('tres','argumentos','usados')

    Estamaneraantiguadecrearlas funcionespuededarmuchosproblemas:

    Requierequerecordemoselordendelosargumentos Nodescribeloquecadaargumentorepresenta Ofrecemenosflexibilidadparaaumentarargumentosadicionales

    3.8.2Lanuevaformadeconfigurarobjetos

    Usandoelobjetodeconfiguracin,tenemosunaltoniveldeflexibilidad,ysepuededecirquenuestrasvariablesestnenunplanodescriptivo.Elordendelosargumentosnoimportams,ya que el primero puede ser el ltimo o estar en medio. Con el mtodo del objeto deconfiguracindepasarargumentosasusfunciones,losargumentosnonecesariospuedeserobviadosdeladeclaracin.

    varprueba=newFuncionPrueba({

    primeraPalabra:'tres',segundaPalabra:'argumentos',terceraPalabra:'usados'

    })

  • Este mtodo tambin permite una expansin ilimitada de los argumentos de nuestrasfunciones.Usandopocosoaadiendomsargumentos.Otragranventajadeusarelobjetodeconfiguracin es que el uso previo de las funciones no se ver afectado por el aumento odisminucindelosargumentosenunusoposterior.

    varprueba=newFuncionPrueba({

    segundaPalabra:'argumentos'})

    varprueba=newFuncionPrueba({

    segundaPalabra:'argumentos',cuartaPalabra:'wow'

    })

    3.8.3Queselobjetodeconfiguracin?

    SiseestfamiliarizadoconCSSoJSON,sepuedenotarqueelobjetodeconfiguracinlucesimilaracualquierdeestosdos,sobretodoporqueeslomismo.Elobjetodeconfiguracinessolounaformadeestructurardatosquepuedeserfcilmenteinterpretadaporloslenguajesdeprogramacin,enestecasoJavaScript.

    Porejemplo,veamoslaporcindelaconfiguracindelnuestroejemplo:

    {title:'Javier',msg:'Hasvistomicomputadora?',buttons:{

    yes:true,no:true,cancel:true

    },icon:'personaicon',fn:function(btn){

    Ext.Msg.alert('Javierhizoclicen',btn)}

    }

    Laconfiguracinparticularqueestamosusandoaqupodraparecercompletaaprimervista,perounavezquelaconocemos,seconvierteenunaformaextremadamentefcildeconfigurarcomponentes.CasitodosloscomponenesdeExtJSutilizanelobjetodeconfiguracin,asquees algo que se nos tiene que volver familiar. El objeto de configuracin se volver nuestromejoramigo.

    Aqu sedetallanalgunospuntos importantesquehayque recordarcuando se trabajaconelobjetodeconfiguracin:

    Se deben colocar llaves para identificar el conjunto de registros, que simboliza losregistrosdentrodeloscorchetescomopartedeunobjeto>{registros}.

    Cada registro se compone de un par nombre/valor, separados por dos puntos, yseparadosporcomasentreellos>{nombre0:valor0,nombre1:valuor1}.

    Losvaloresdelregistropuenteserdecualquiertipodedato,incluyendobolean,array,function,ocualquierotroobjeto>{nombre0:true,nombre1:{nombre2:valor2}}.

    Los corchetes definen un arreglo > {nombre:[uno,dos,tres]}. Un arreglo puedetambincontenerobjetosconregistros,valoresocualquiernmerodeotrascosas.

    Lamayor ventaja de usar JSON para configurar nuestros componentes, es que si nosotrosnecesitamosmsopciones,podemosempezardigitndolasylisto.Contrarioalatpicallamadaaunafuncin,elordendenuestrasopcionesdeconfiguracinllegaaserirrelevante,ypuedehaberpocosotantosargumentoscomoseannecesarios.

  • 3.8.4ComofuncionaJSON

    Todosebasaen la funcineval,que es laqueJavaScriptusapara interpretarunacadenaJSON,yconvertirlaenobjetos,arraysyfuncionesquepuedenserusadas.

    3.9Modificandoelejemploanterior

    Vamos a abrir nuestro ejemplo pregunta.js yvamos a grabar como pregunta2.js y vamos aaadirlefuncionalidadacadabotndediferentemanera:

    fn:function(btn){

    switch(btn){

    case'yes':Ext.Msg.prompt('Javier','Dndeest?')break

    case'no':Ext.Msg.alert('Javier','Voyaquemareledificioahora!')break

    case'cancel':Ext.Msg.wait('Grabandoaldisco','Copiadearchivos')break

    }}

    EnesteejemplovemoslosdiferenteselementosdeExt.Msg,

    CuandosedaclicenelbotnSi,sedespliegaundilogotipopromptquepermiteingresarunsolovaloryesunelementoestndarencasitodaslasinterfacesdeusuario.

    CuandosedeclicenNosedespliegaunaalerta,parecidaalaalertaestndardelJavaScriptperoconesteroides.

    AlhacerclicenelbotnCancelar (opresionar la teclaEscape)sedespliegaunmensajedeesperausandounabarradeprogreso.

  • La barra de progreso que estamos usando puede ser controlada y desaparecer cuando elprocesosehayaculminado.Paraesteejemplosequedaejecutandosinfin.

    3.9.1Encendiendoelfuego

    Ahora,vamosaempezarcausandoalgunasreaccionesennuestrapgina,basndonosenlasrespuestasde losusuariosa losdilogos.Dentrodenuestrasentenciaswitch,paraelbotnSicolocaremosuntercerargumentoen lafuncinpromptqueseejecutarcuandoelbotnAceptarseapresionado.Vamosavalidareltextointroducidoeneldilogodelprompt,siesigualaenlaoficinasepresentareltextoNoestah,casocontrarioseimprimireltextointroducido.

    NecesitamoscolocarunDIVenelcuerpodelapgina

    Yelsiguientecdigoenelcase:

    case'yes':Ext.Msg.prompt('Javier','Dndeest?',function(btn,txt){

    if(txt.toLowerCase()=='enlaoficina'){

    Ext.get('my_id').dom.innerHTML='Maltrabajo'}else{

    Ext.get('my_id').dom.innerHTML=txt}Ext.DomHelper.applyStyles('my_id',{

    background:'transparenturl(imagenes/computadora.gif)50%50%norepeat'})

    })break

    Paraelcasodel No,sedesplegarunaalerta,que tambincambiaelestilodeldocumentocuandoelbotnespresionado.

    case'no':Ext.Msg.alert('Javier','Voyaquemareledificioahora!',function(){

    Ext.DomHelper.applyStyles('my_id',{

    'background':'transparenturl(imagenes/fire.png)0100%repeatx'})Ext.DomHelper.applyStyles(Ext.getBody(),{

    'backgroundcolor':'#FF0000'})Ext.getBody().highlight('FFCC00',{

    endColor:'FF0000',duration:6

    })})

    break

  • Analizandoelejemplo,podemosverlosiguiente:

    Podemosenviarcomoparmetrounafuncin Ademsvemoslautilizacindevariassentenciascomo:

    o Ext.get() >Estemtodo permite el acceso a cualquier elemento del documentoHTMLcolocandocomoparmetrosuIDypermitemanipularlo,comohemosvistoenelejemplo.

    o Ext.DomHelper > Esta clase proporciona una capa de abstraccin de DOM yapoya de manera transparente a travs de la creacin de elementos DOM outilizandofragmentosdeHTML.TambintienelahabilidaddecrearplantillasdefragmentosHTML,apartirdelaconstruccindesuDOM.

    o Ext.getBody()>RetornaelbodyactualcomounelementodeExtJS.

  • CAP.4.PanelsyTabPanels

    4.1Panel

    ElPanelesuncontenedorquetieneunafuncionalidadespecficaycomponentesestructuralesque lohacenelperfectobloquedeconstruccinparaaplicacionesorientadasa interfacesdeusuario.

    4.1.1ElaboracindePanels

    TodosloscomponentesdeExtJStienensudeclaracin,susmtodosypropiedades,paracuyadefinicinseutilizaelobjetodeconfiguracinantesrevisado,enelcasodelPanelseconfiguradelasiguientemanera:

    1. Creamosenlacarpetalibreriasdenuestroproyectounarchivoquesellamepanel.js2. CreamoselPaneldirectamenteasignandoelobjetoaunavariableusandolallamada

    almtodocreadorExt.Panel().3. Alobjetocreadolecolocamoslassiguientespropiedades:

    a. Ttulob. Anchoc. Altod. Ylomsimportante,dondevaaubicarse,paraellodebemosusarlapropiedad

    applyTo,yaqueestepanelpodr serel contenedordeotrosobjetos,msnoestcontenidodentrodeotrocomponente,siasfueranonecesitaramosestapropiedad.

    4. En el index.html llamamos en las libreras propias, solamente al archivo panel.js ycorremosnuestraaplicacin.

    Ejercicio:Aadirmspropiedades.

    4.2TabPanel

    Un TabPanel puede ser usado exactamente como un Panel estndar para propsitos dediseo, con laventajaadicionaldequeposeeno solounpanel, sinovariosmanejadosporpestaasseparadas,estaspestaaspuedencolocarsetantoarribacomoabajodelpanel.

    4.2.1ConstruyendonuestroprimerTabPanel

    ParaconstruirnuestroprimerTabPanel,vamosacrearlodentrodelPanelquecreamosconanterioridad y de otra forma de las que hemos observado hasta ahora, para crear uncomponentedeExtJSdentrodeotro,lopodemoshacerdedosformas:

    1. Asignandoelobjetoocomponenteaunavariableycolocandoestavariablecomoitemocomponentedeotro,comoyahemosvisto.

    2. Realizando una creacin interna sin asignar a unavariable y para hacer referencia aesteobjetoencualquierotrolugarusaremossuID.

    Para ello vamos a usar el ejemplo que ya tenamos de la creacin del Panel y seguir lossiguientespasos:

    1. Lovamosarenombrarcomotab_panel.js.

  • 2. ColocamoselTabPanelcomoitemdelpanel.3. Cambiamoslalibrerallamadaenelindex.htmlycorremoslaaplicacin.

    Lapropiedaddeconfiguracinitems,esunarraydeobjetosquedefinecadaunodelostabscontenidos en este TabPanel. El ttulo es la nica opcin que obligadamente necesita sercolocadaparavisualizarcorrectamentecadatab.

    Tambin necesitamos colocar un tab activo con la propiedad activeTab, que es cero paranuestroTabPanel.Esteeselndicedelostabsenelpanel,deizquierdaaderechaempezandoacontardesdecero.Esto le indicaalTabPanelqueel tabde laposicincerodebehacerseactivopordefecto,delocontrario,resultaraenunpanelenblancohastaqueelusuariohagaclicenunapestaa.

    Ejercicio:ColocarlassiguientespropiedadesdeconfiguracinalTabPanelyverquesucede:

    closable disabled tabPosition

    4.2.2ManejodeTabs,mtodosquedebesconocer

    Tenemosalgunos mtodosespecialesparaelmanejodetabs,queson:

    add(array objeto de configuracin): Aade dinmicamente un tab al contenedor, comoparmetrosecolocaelobjetodeconfiguracindeseadoparaelnuevoelemento.

    setActiveTab(String/Number item):Colocaun tabespecficocomoactivo,paraellohayqueenviarcomoparmetroelndicedelelementodeseado.

    getActiveTab():Retornaeltabactivoactual. show():Muestra fsicamenteenelcontenedor,unelementorecinaadidooquese

    encuentreoculto. hide():Ocultasolamentelapestaadeltab,noelcuerpo,paraellohayqueutilizarel

    mtodohideTabStripItem.Esmuytilparacuandosecolocalacaractersticaclosable:true,debidoaquecuandosecierraunapestaaelobjetoseautodestruye,sisevuelveanecesitareltabhayquevolveracrearloyestoesunpocomspesado,porloquesedebeprogramareleventobeforemoveyhacerquesoloseoculte,noseautodestruya.

    hideTabStripItem(Number/String/Panelitem):Ocultaelcuerpodelapestaa.

    Estosmtodoslosveremosejecutadosjuntoconlayoutsyregions.

  • CAP.5.Viewports,layoutsyregions

    5.1.Viewports

    ElViewportesuncontenedor(seheredadelaclaseContainer)queens,tieneunaestructuraigualquecualquierotrocontenedor,perotieneunlugarespecialdentrodeExtJS.ElViewportrepresentaeltotaldelasuperficievisibleparaelusuario,loquesignificaqueeslaventanadelnavegador en otras palabras (o para serms precisos, la porcin donde se ejecuta un sitioweb,tpicamentellamadoventanadelnavegador).

    Cuando se crea un Viewport automticamente se coloca dentro del del documentocargadoenelexploradoryseacomodaparaocupartodalaventanadelnavegador.Tambinestal tantode loseventosdecambiode tamaode laventanadelexploradorquepuedanocurriryreaccionaapropiadamente.Porestarazn,solopuedeexistirunViewportporpgina.

    El Viewport est dotado con una estructura especfica de diseo, puede ser BorderLayout,CardLayoutoloquesea,porejemplo:

    newExt.Viewport({

    layout:"fit",items:[{

    title:"Ventanadelnavegador",bodyStyle:"backgroundcolor:#999999",html:"Algncontenido"

    }]})

    5.2Layouts

    Un layout transformacualquiercontenedorenunaverdaderaaplicacinweb.LosestilosmsampliamenteusadospuedenserencontradosensistemasoperativoscomoMicrosoftWindows,queutilizaborderslayouts,regionesdetamaovariable,acordeones,tabsycasitodoloquesepuedaimaginar.

    Paramanteneraparienciaconsistenteentodoslosnavegadores,yparaproveercaractersticascomunes de interfaces de usuario, Ext JS tiene un poderoso sistema demanejo de layouts.Cadaseccinpuedesermanejadaypuedesermovidaoescondida,ypuedenaparecerenunclic,cuandoydondesenecesite.

    5.2.1FitLayout

    UnFitLayoutcontieneunsoloelementoqueautomticamenteseexpandepara llenar todoelcontenedor. Por lo general no se crea la instancia de esta clase, en la mayora decontenedoressecolocaeltipodelayoutenlapropiedadcorrespondiente.

    Curiosamente, FitLayout no tiene sus propias propiedades de configuracin, adems de lasquehereda.CuandosenecesitetenerunPanelquelleneelcontenedorentero,FitLayoutdebeserusado.Todoloquesenecesitaescolocarelatributolayoutenelcontenedorpararellenar.

    5.2.2BorderLayout

  • UnBorderLayoutesrelativamenteun layoutmuysimpleque tambinesdeusomuycomn,talvezelmspopular.Eseesunlayoutquetienecincoregiones:

    unaalolargodetodalapartesuperiordelapgina, otraenelladoizquierdo, otraenelladoderecho, otraenlapartedeabajo yotraentretodaslasdemsenelmedio.

    The BorderLayout soporta barras de separacin entre las regiones, permitiendo al usuariocambiarlas de tamao. Tambin soporta secciones que se pueden tanto expandir comocolapsar.TalcomoFitLayout,elBorderLayoutensimismono tienesuspropiasopcionesdeconfiguracin.

    SibienhaycincoregionesdisponiblesenelBorderLayout,noesnecesarioqueseusentodas.Sinembargo,nosepuedeadicionar regionesdespusdequesehahechoelBorderLayout,poresohayque asegurarsedecuantas regiones se necesitanparaconfigurarlascuando secreaelBorderLayout.

    No se puede crear una instancia de Ext.layout.BorderLayout. En su lugar se debe configurar elatributo layout de algun contenedor. Por ejemplo, creamos un Viewport, para desplegar los usos deBorderLayoutparaorganizarestecontenedor:

    varviewport=newExt.Viewport({

    layout:'border',renderTo:Ext.getBody(),items:[{

    region:'north',xtype:'panel',html:'Norte'

    },{

    region:'west',xtype:'panel',split:true,width:200,html:'Oeste'

    },{

    region:'center',xtype:'panel',html:'Centro'

    },{

    region:'east',xtype:'panel',split:true,width:200,html:'Este'

    },{

    region:'south',

  • xtype:'panel',html:'Sur'

    }]})

    Sitodosalibien,veremosalgocomolosiguiente:

    Ahoratenemosunlayoutconcincoregionesdefinidas.Estasregionespuedencontenerotroscomponentes,sinproblemas.Comoalternativacadareginensimismapuedeserdivididaenmsregionesanidadas,porejemplo laseccindelcentropuedeserdivididahorizontalmenteparatenersupropiareginsur.

    Ejercicio:Hacerquelasregionespuedacambiarsedetamaoosepuedancontraer.

    5.2.3Accordion

    ElAccordionesenciertomodosupropiocomponente.Enotraslibrerasrealmenteloes,peroenExtJSesuntipodelayout(esliteralmenteunaextensindeFitLayout).Enpocaspalabras,un Accordion es una sola capa en la que se tienen diferentes paneles que pueden serseleccionadosporelusuario.Estospanelesestnapiladosverticalmente(aunquehayalgunasimplementaciones que permiten hacerlo horizontalmente tambin) y usualmente incluye unbonitoefectoanimadocuandoseseleccionaunodeellos.Porejemplo:

  • UnejemploquecreaunAccordionpuedeser:

    varpanel=newExt.Panel({

    title:'Miprimeracorden',layout:'accordion',height:400,collapsible:true,layoutConfig:{

    animate:true},items:[{

    title:'Panel1',html:'YosoyelPanel#1'

    },{

    title:'Pane2',html:'YosoyelPanel#2'

    },{

    title:'Pane3',html:'YosoyelPanel#3'

    }]})

    AqusecreaunainstanciadeExt.Panel,conunlayouttipoAccordion.Seespecificaelaltoyseestablece la propiedad collapsible: true, para que se puedan colapsar y se configura lapropiedad animate: true, comn para todos los paneles, que permite establecer un bonitoefectoelmomentodeseleccionaralgnpanel.

    5.2.4CardLayout

    ElCardLayoutesuntipodeFitLayoutconesteroides,yaquepermitetenermltiplespanelesadaptadosaloscontenedores,perosolamentepermitemostrarunoalavez.Interfacescomolos wizards son tpicamente implementadas con CardLayout, as como las interfaces conpestaas.

    El mtodo ms importante expuesto por el CardLayout es setActiveItem (). Este permitemostrarunnuevopanelenelCardLayoutyaseaporsucdigoporelvalordelndice.Esteestcompletamentebajoelcontroldelprogramador,elCardLayoutnopuedeintercambiarseentre

  • paneles por si solo (o en respuesta a algn evento de usuario, amenos que se escriba elcdigoparahacerlo),asquenohayalgopordefectoparaque se intercambien lospanelescomoeselcasodelAccordion.

    El CardLayout tambin soporta la opcin de configuracin deferredRender, que, cuando esseteada a true, le dice al contenedor que solamente coloque el panel que actualmente semuestra.Estaesunabuenaopcindeconfiguracinparaquelacargaseaeficiente.Ejemplo:

    varpanel=newExt.Panel({

    title:'MiPrimerCardLayout',layout:'card',height:400,id:'myCardLayout',activeItem:0,items:[{

    title:'Panel1',html:"Hola,soyelPanel#1

    "+""

    },{title:'Panel2',html:"Hola,soyelPanel#2

    "+""

    }]})

    En este ejemplo tenemos configurado un Panel tipo CardLayout que tiene dos panelesinternos,elpanelactivoeselpanelcero,yenlaconfiguracinhtmldecadauno,secreaunbotn tipo HTML simple, el cual al presionarlo cambia al otro panel configuradorespectivamente.

    Ntese que para configurar la propiedad html se usa HTML simple y se maneja el eventoonClickdelbotndentrodelcualsecolocacdigopropiodeExtJS.

    5.2.5TableLayout

    Un TableLayout permite crear capas basadas en tablas con facilidad. En algunos casos esconceptualmentesimilaralBorderLayoutexceptoquese tieneelcontroldecuantasregionespodamosquerer.

    UnagrandiferenciaentrecrearunlayoutusandoTableLayoutyusandotablasconHTMLplanoesqueconTableLayoutesqueyanonospreocupamosdelastablasyfilasdeformaexplcita.Nohayquepreocuparsedelasceldasconfilasninadaporelestilo.TodoloquehayquehaceresespecificarelnmerodecolumnasqueelTableLayoutdebeteneryentoncesaadirobjetosencadauno,dederechaaizquierda,dearribahaciaabajo.ElTableLayoutsedarcuentadelaposicindecadapanelbasndoseenlacuentadefilas,ademssepodrcolocarcualquiertamaode fila ycolumnaque senecesite.Si seestacostumbradoa lacreacinde tablasHTML,utilizandoTableLayoutpuedeserunpocodifcildeentenderparaelcerebro,perounavezquelohace,rpidamente,unosedacuentadelaflexibilidadqueofrece.Ejemplo:

    varpanel=newExt.Panel({

    title:'MiprimerTableLayout',layout:'table',height:400,layoutConfig:{

    columns:2},items:[

  • {html:'Columna1,Celda1',width:200,height:200

    },{

    html:'Columna2',rowspan:2,width:200,height:400

    },{

    html:'Columna1,Celda2',height:200

    }]})

    5.2.6AnchorLayout

    UnAnchorLayoutesunlayoutquepermitequeloselementoscolocadosenuncontenedorseacoplenunosconotros.Enotraspalabras,sielcontenedorcambiadetamao,yaseaporqueel contenedor mismo cambia de tamao o indirectamente del resultado del cambio de sucontenedorprincipal,entoncestodosloselementosdentrodelseacoplanalnuevotamaoylomsimportanteseredimensionan,deacuerdoalasreglasqueseconfiguren.

    Enestafigurasepuedeverquealcambiardetamaoalaventana,loscomponentesadentrotambincambiandetamao.Ejemplo:

    varventana=newExt.Window({

    resizable:true,layout:"anchor",title:"MiPrimerAnchorLayout",width:200,height:200,items:[{

    xtype:"textfield",anchor:"100%",value:"textfield1"

    },

  • {xtype:"textfield",anchor:"100%",value:"textfield2"

    },{

    xtype:"textarea",anchor:"100%60%",value:"textarea"

    }]}).show()

    Enestecasotenemosdoscamposdetextoyunreadetexto.Enlaventanaseespecificaelatributolayoutcomoanchoryencadaelementotambin.Elvalordeesteatributoessiempreenlaformaxxyydondexxeselvalordeanclajehorizontalyyyeselvertical.

    Trestiposdevaloressonsoportadosaqu,Elprimeroesunporcentaje.Asqueenelcdigodelreade textoelatributoanchor ledicequedebeserexpandidopara rellenar laventanahorizontalmente y que puede tomar un 60% del rea disponible en la ventana. Se puedeconfigurartambinunsolovalorqueespecificaelaltoyelanchoautomticamente.

    Sepuedetambinespecificarunvalordedesplazamientoparaelatributoanchor.Estepuedeserpositivoonegativo.Elprimervaloresundesplazamientodesdeladerechadelcontenedor,yelsegundodesdeabajo.As,sielatributoanchorparaelreadetextofuera2575,indicaquesedebedibujarelitemalanchocompletodelaventanamenos25pixelsyelaltocompletodelaventanamenos75pixels.Aligualqueconporcentajes,ensulugarslopuedeespecificarunvalornico,yquesetomarcomoelderechodecompensacin,conelfondocompensadopordefectoa0.

    Sepuedetambinespecificarunvaloranchorparaderecha,or,otroparaabajoob.Paraqueesto haga algo, sin embargo, el contenedor debe tener un tamao arreglado o debe serconfiguradalapropiedadanchorSize.

    Tambinsepuedemezclarambostiposdevalores,porejemplounvalorde1080%significaqueelelementodebeserdibujadoalanchocompletodelcontenedormenos50pixelsdesdeladerechayal80porcientodelaltodelcontenedor.

  • CAP.6.Ventanasydilogos

    6.1Elayeryelhoyconventanas

    Entiempospasadosdelaweb,losusuariosdelossistemastradicionalespasaransutiempoingresando datos en listas y formas. Escogiendo tems de una lista de rdenes de compra,luegonavegandohacialosdetallesunayotravez.Elproblemaesqueestamoshablandodecientosdeentradasenunalistayvariosdetallesenlasformas.Lomsprobableeraque,enelejemplo anterior de rdenes de compra, se necesita ms subformas para mostrar toda lainformacinqueestdisponibleycadavezqueelusuariosemueveaotrapantallasetengaquerefrescarlapginacompletaytraertodoslosdatosdenuevodelabasededatos.

    HoyconlosobjetosyherramientasqueExtJSnosprovee,podemosrealizarunmejortrabajo,tantoenpresentacinyobtencindedatoscomoenvelocidaddeaccesoalaspantallas.

    Otra parte importante del rompecabezas que nos permite hacer esto son lasventanas y losdilogos,yaquenospermitenpresentarcualquierclasedeinformacinsinforzaralosusuariosanavegaraotraspantallas.

    6.2Dilogos

    Los dilogos son una poderosa herramienta para mostrar alertas, mensajes y errores alusuario, haciendo un buen uso de ellos logramos tener una buena comunicacin entre elsistemayelusuariocreandounainterfazamigableycmoda.

    TodoslosdilogosdeExtJSsetomandelaclaseExt.MessageBoxoconelaliasExt.Msg.

    6.2.1Alert

    Ext JS nos provee con un excelente reemplazo a las alertas simples de JavaScript.Con lasiguientelneadecdigoveremoscomofunciona:

    Ext.Msg.alert('Hey!','Algopasa!')

    LaprimeracosaquenotamosesqueMsg.alert tienedosparmetros,mientrasque laalertaestndar tienesolouno.Elprimeronospermiteespecificarel ttulode laalertayelsegundoespecificaelcuerpo.Loquesedespliegaalejecutarelcdigoanteriores:

    Comosepuedever,sufuncionamientoeselmismoquelaalertaestndarperotieneunamejorapariencia y esms verstil. Podemos tambin transmitirms informacin con la barra delttulo.MostrarMsg.alertnodetienetemporalmentelaejecucindelscriptcomolohacelaalertanormalhayqueserconcientesdeestocuandoseusalaversindeExtJS.

    Tambin hay que tomar en cuenta que se puede usar solo un Ext.MessageBox al mismotiempo.Sisetratadeenviardosalmismotiempo,elprimeroserreemplazadoporelsegundo.

  • 6.2.2Prompt

    Otrocomponente tipodilogoesExt.Msg.prompt.Estenospermitecapturarunasimplelneade textode lamismaformaqueelpromptestndardeJavaScript.Sinembargo,en lugardelimitarseadevolverunvalor,nosdaalgunasopcionesms.

    Ejemplo:

    ConJavaScriptestndar:

    vardata=prompt('Dimealgo')alert(data)

    ConExtJS:

    Ext.Msg.prompt('Hola!','Dimealgo',function(btn,text){

    if(btn=='ok'){

    vardata=textExt.Msg.alert('Tdigiste:',data)

    }else

    Ext.Msg.alert('Ohh','Nohasqueridodecirnada')},this,false,'')

  • Unavezms,Msg.promptpermitepasarun ttulocomoelprimerargumento,yelcuerpodeltextoeselsegundo.Eltercerargumentoesunafuncindedevolucindellamadaocallbackfunction en ingls, que puede ser llamada cuando cualquiera de los dos botones,Aceptar oCancelarseapresionado.La funcin tienedosargumentos,elbotnque fuepresionadoyeltextoquefueingresadoporelusuario.

    Los otros tres parmetros de la funcin, son el objeto, un indicador demultilnea y unvalorinicial, respectivamente. El argumento demultilnea permite tener un rea de escrituramsampliaparaelprompt.

    6.2.3Confirmation

    El dilogo de confirmacin permite al usuario escoger entre una accin de confirmacin orechazoaalgunaaccin.Elcdigoeselsiguiente:

    Ext.Msg.confirm('Hola!','Estdeacuerdo?',function(btn,text){

    if(btn=='yes'){

    Ext.Msg.alert('Bien','Mealegromucho')}else{

    Ext.Msg.alert('Estbien','Nohayproblema')}

    })

    Denuevousamos,unttulo,untextoenelcuerpoyunacallbackfunctioncomoenelprompt.UnainteresantediferenciaconlaconfirmacinestndardeJavaScriptesquedalasopcionesdeAceptaryCancelarynosoloSiyNo.

    6.2.4Progress

    Los anteriores tipos de dilogos eran un reemplazo a lo que ya exista en el JavaScriptestndar,ahoravamosaverundilogoms,desarrolladoporExt JS,queeseldilogodeprogreso.Ext.Msg.progress,estenoestdiseadoparaserusadoindependientementecomolos otros dilogos, y no necesita accin del usuario. De hecho, se puede disparar de lasiguienteforma:

    Ext.Msg.progress('Hola!','Estamosesperando...','progreso')

    Con esta declaracin estaremos esperando hasta que nos cansemos, porque es un dilogoque nunca progresa. Los dos primeros argumentos son el ttulo y el texto del cuerpo delmensaje,igualqueenlosanteriorestiposdedilogos,mientrasqueelterceroeseltextoqueaparecerenlabarradeprogreso.

    Asqueparanoesperareternamente,debemosactualizarelmovimiento,paraesonosayudaelmtodoExt.Msg.updateProgress,creadosoloparaestepropsito.Acontinuacinunejemplodesuuso:

    varcount=0varinterval=window.setInterval(function(){

  • count=count+0.04Ext.Msg.updateProgress(count)if(count>=1){

    window.clearInterval(interval)Ext.Msg.hide()

    }},100)

    Este es un ejemplomuy artificial, en el que llamamos almtodo upgrateProgress cada 100milisegundosatravsdeuntemporizador,eincrementaelprogresousandolavariablecountcada vez. El primer argumento de este mtodo es un valor entre cero y uno, con cerorepresentamoselinicioyconunorepresentamoselfin,elsegundopermiteactualizareltextodelabarradeprogresoyelterceropermitecambiareltextodelcuerpodelmensaje.Actualizareltextopuedesertilsisedeseaproveerdeinformacinadicionalalusuario,oparamostrarlarepresentacindelporcentajecompletadodelprocesoactual.

    Regresandoalejemplo,ntesequesehacereferencia tambinaExt.Msg.hide,conelfindelimpiarlabarradeprogresodelapantalla,yaqueelmtodoupdateProgressnomanejaesto,inclusosiseestableceelprogresoactualaunvalordemsdeuno.

    6.2.5Show

    Loscuatromtodosanterioresparacreardilogos,sonenesenciaaccesosdirectoshaciaunquintomtodo: Ext.Msg.show. Estemtodo toma un objeto de configuracin como su nicoargumento y las opciones de configuracin dentro de l permiten la creacin de unmessagebox que soporta todas las caractersticas disponibles a travs de los mtodosanteriores.Laformamssimpledeestemtodoes:

    Ext.Msg.show({

    msg:'IMPRESIONANTE.'})

    EstaesunarplicamscercanaalaalertaestndardeJavaScript,peronoesfuncional,algomejorsera:

    Ext.Msg.show({

    title:'Hola!',msg:'IconosyBotones!IMPRESIONANTE.',icon:Ext.MessageBox.INFO,buttons:Ext.MessageBox.OK

    })

    Ahora tenemosotravezun ttulo,un textoenel cuerpo,peroahorahayun iconoyun solobotn.

    Laformadeconfigurariconosybotonesesinteresante,sepasaunadelasconstantesqueExtJSproveeysepuedetenerunbotnpreconfiguradootambinsepuedeunautilizarunaclaseCSSquemuestreunicono.Lalistadeconstantesparaiconoses:

    Ext.Msg.ERROR Ext.Msg.INFO

  • Ext.Msg.QUESTION Ext.Msg.WARNING

    Ylasconstantesparabotonesson:

    Ext.Msg.CANCEL Ext.Msg.OK Ext.Msg.OKCANCEL Ext.Msg.YESNO Ext.Msg.YESNOCANCEL

    Esta variedad de opciones listas provee gran flexibilidad cuando deseamos colocar unaapariencia grfica a nuestros messageboxes, pero podemos hacer ms cosas. Lasmencionadas constantes de iconos son simplemente cadenas que representan nombres declaseselaboradasconCSS.Porejemplo,Ext.Msg.QUESTIONtienepordetrslaconfiguracinextmbquestion,quenoesmsqueunaclaseconfiguradadeCSS.EstoseencuentraenlashojasdeestilodeExtJS.Laconclusin lgicaesquesepuedetambinconfigurarnuestraspropias clases CSS para colocar en lugar de estas constantes, lo que permite granpersonalizacindelasreasparaiconos.

    Las constantes de botones son un poco menos flexibles, y contienes objetos literalesespecificandocomodebenserdesplegados.Porejemplo,Ext.Msg.YESNOCANCELcontienelosiguiente(representadoenJavaScriptObjectNotationparafcillectura):

    {cancel:true,yes:true,no:true}

    Estoespecificaquelosbotones,yes,cancelynodebenserincluidos.Sepuedeusarestoparaapagarunbotnuotro,peronosepuedecambiarelordenenelqueaparecen,debidoaqueesunestndar.

    Sinembargo,podemosajustarlosdilogosdeotrasmaneras.Esposiblecolocardimensionesauncuadrodedilogo,altoyancho.Estepuedesertilensituacionesdondese tengaquedesplegarunmensajemuygrandeysedebaevitarqueseextiendaalolargodelapantalla.

    Elcuadrodedilogoshow,ysuobjetodeconfiguracinpermitenlaopcinclsparaespecificarunaclaseCSSparaaplicaralcontenedordeldilogo.UndesarrolladorpodrausarestopararemarcarcualquierobjetodelcontenedorusandoreglasCSS.

    6.2.6ComportamientogeneraldeShow

    Hasta el momento, las opciones de configuracin para Ext.Msg.show han sido solo deapariencia, pero hay algunas opciones que pueden ajustar el comportamiento. Si se usa lapropiedadprogress,entoncessepuedereplicareldilogoestndardeprogresodeExtJS:

    Ext.Msg.show({progress:true})

    Medianteelusodeesteconjuntodeopcionesconotrascomottuloycuerpodemensaje,sepuedecrearcuadrosdedilogobastantepersonalizados.

    De formasimilar,elprompty lasopcionesdemultilneapermiten lacreacindecuadrosdedilogodeentrada:

    Asquesepuedecrearuncuadrodedilogoqueaceptemltipleslneasdeingreso.Peroporomisinelvalormultilneaesfalso,sepuedelimitarelcuadrodedilogoaunasolalnea,etc.Sepuedehacercuadrosdedilogodeentradamuypersonalizados.

    Otraopcinquecambiaelcomportamientopordefectodeuncuadrodedilogoesmodal.Estaopcinpermiteespecificarsielusuariopuedeinteractuarconloselementosqueestndetrs

  • de la ventana emergente. Cuando se establece en true, se coloca un recubrimientosemitransparenteparaevitarlainteraccin.

    Comohemosvistoantes,loscuadrosdedilogodeExtJS,nobloqueanlaejecucindelscript,comosucedeenJavaScript.Estosignificaquesepuedenusarcallbackfunctionsparadispararcdigo despus de que el dilogo es cerrado. Podemos hacer esto usando la opcin deconfiguracinfndeshow,queesllamadacondosargumentos,elcdigodelbotnquehasidopresionadoyel texto ingresadodentrodel campoeneldilogo (dondeeldilogo incluyeuncampo de entrada). Obviamente, para una alerta simple el parmetro del texto vendr enblanco,peroestafuncinproporcionadeformaconsistentetodalagamadecuadrosdedilogoquepuedensercreadosutilizandoExt.Msg.show.

    6.3Ventanas

    Cualquierusuariodecomputadorasesta familiarizadoconelconceptodeventanasunpanelinformativo que aparece en la pantalla para proporcionarms datos sobre las acciones delusuario actual. Ext JS aplica este concepto mediante el uso de la clase Ext.Window, unpoderosocomponentequesoportavariosavanzadosescenarios.

    6.3.1Empezando

    Sepuedeabrirunaventanausandounapequeacantidaddecdigo:

    varw=newExt.Window({

    height:100,width:200

    })w.show()

    Corriendoestecdigoseobtieneunaventanavacaqueensimismaescompletamenteintil,pero esto muestra algunas de las caractersticas predeterminadas de Ext.Window. As, sinningunaconfiguracin,laventanasepuedearrastrarysepuedeajustarentamao,ademssetiene un til icono para cerrarla en la esquina superior derecha. Todava no es unademostracinmuyimpresionante,sinembargo,porquenuestraventanaenrealidadnomuestranada.

    LaformamsfcilderellenarunaventanaesconelviejoyplanoHTML.Porejemplo:

    varw=newExt.Window({

    height:150,width:200,title:'UnaVentana',html:'Ohhh

    Holaatodosdesdeaqu

    '

    })w.show()

    Se han aadido dos nuevas opciones de configuracin aqu. La primera es un ttulo quepermitecolocaruntextoenlabarrasuperiordelaventanaylasegundapermiteaceptarunacadenaHTMLquedespliegauntextoenlaventana.

  • El uso de este enfoque es inmediatamente evidente, se puede volver a lo bsico e inyectarcualquiercontenidoHTMLqueserequieradirectamenteenelreadelcontenedor.EstonospermitemodificarnuestraventanajustocercadelnivelmarcadoyproporcionarcientosdeCSSparaengancharelestilo.Anas,estonoesloqueseesperallegaratenerconExtJS.Haymuchasotrasopcionesquepermitirnllegaralodeseado.

    6.3.2Unpanelconpotencia

    Hay que recordar que Window es una subclase de Panel, y Panel tiene toda clase deinteresantes trucos bajo la manga. La opcin de configuracin tems, acepta un vector deobjetosdeconfiguracinuotrasinstanciasdecomponentes:

    varw=newExt.Window({

    items:[{

    xtype:'textfield',fieldLabel:'Nombre'

    },newExt.form.TextField({

    fieldLabel:'Apellido'})]

    })w.show()

    Enelejemplodearriba,sehanaadidodostextfields,elprimerousando inicializacinlazyconxtypeyelsegundousandounainicializacinestndar.Estosdostemssernaadidosalpanelinternodelaventana,perolamaneraenlaquesondesplegadospuedesercontroladaconlapropiedadlayoutdenuestraventana.

    6.3.3Layout

    ExtJSdefineunnmerodemodelosde layoutdentrodelpaqueteExt.layout ycadaunodeestospuedeserconunpanelparapermitirqueloscomponentesdentrodelseandispuestosdeunamaneraespecfica.Enelejemploanterior,seaadierondoscajasdetextoalaventana,peropodemosmejorarlaaparienciadelaventanasimplementeusandoellayoutapropiado.Eneste caso, necesitamos Ext.layout.FormLayout, que proporciona soporte para etiquetas y elespaciogeneralyelposicionamientoesperadoparaunaformaconcamposeditables:

    varw=newExt.Window({layout:'form',items:[{

    xtype:'textfield',fieldLabel:'Nombre'

    },newExt.form.TextField({

    fieldLabel:'Apellido'})]

  • })w.show()

    Usando laopcindeconfiguracin layout,paraespecificarquesedesea tenerunpanel tipoform,sepuedeapreciarinmediatamenteladiferencia:

    EstanoesunacaractersticadeExt.WindowyaqueprovienedelasuperclasePanel.Peroelhechodequeunaventanasoporteestacaractersticaesextremadamenteimportanteparaundesarrollador de aplicaciones, especialmente si tenemos en cuenta cunto tiempo tomaracrearunaformaricaconlatcnicadeinyeccindecdigoHTML.LasotraslayoutsdentrodelpaqueteExt.Layout,proporcionanmuchosmsenfoquesdediseoyexpansindeescenariosqueunaventanapuedesoportar.

    Ademsparalasvariasmanerasderellenarunreadecontenidodeunaventana,tambinsetieneunagranflexibilidadcuandosetratadelaaparienciayelcomportamientodeuncuadrodedilogo.Haymuchasopcionesdeconfiguracinproporcionadosporlajerarquadelasuperclase Ext.Window, que empiezan con el Ext.Panel, al mismo tiempo que tiene una grancantidaddeopcionesdeconfiguracinpropias.

    6.3.4Limpiandoventanas

    En nuestro primer ejemplo de ventanas, se demostr que se tiene un gran nmero decaractersticasparareajustar,arrastrarlibrementeyademssetieneunbotnparacerrar.Yadentrodeunaaplicacin,puedenhaberventanasconestrictosdiseosdeconfiguracin,ynonecesitanser reajustables,por loquesepuedeevitarestecomportamientoseteandoelvalorfalse en la propiedad resizable. A menudo arrastrar, tambin es solo una cuestin depreferencia,yenmuchoscasosdejaractivadaestapropiedadpuedecausardaoyseramejordeshabilitarla.Loquequieredecirquehayvecesenlasquenoesnecesariamentefuncional,paramostrarcomo,tenemoselsiguienteejemplo:

    varw=newExt.Window({

    height:50,width:100,closable:false,draggable:false,resizable:false

    })w.show()

    Cuandoseusaunaventanatipoforma,amenudoespreferibledisponerdebotonesdetextoparaexplicarlasdiferentesacciones,porejemplo,sepuedegrabarunregistroocancelaralgncambioquehayasidorealizadoyenalgunoscasos,elbotncerrarpuedeserdeshabilitado,colocandolaopcinclosableafalse.Hayunasegundaopcinquedaunpocomsdecontrolsobreestecomportamiento:closeActionpuedeserconfiguradaparacuandodeseamosocultary no cerrar nuestra ventana, con hide simplemente se hace que desaparezca la ventana,mientrasqueconclose,seremuevelaventanadelDOM.Estaesunaimportantediferenciasi

  • sedeseareutilizarlaventanadespus,yaqueesconderlaventanaparamostrarlacuandosenecesiteesmseficientequerecrearlacadavez.

    6.3.5Losextras

    Conlasopcionesdeconfiguracinbajocontrol,sepuedenrevisarlasmanerasenlasquesepuedemodificaryaumentarlascaractersticasdelaExt.Window.Yasehademostradoelusode las opciones height y width, para configurar las dimensiones de la ventana y recortarcualquiercontenidoqueexcedaestasdimensiones.

    SetienentambinotrasopcionescomoautoheightyautoWidth,querecibenvaloresbuleanos,quepermitenrellenarlaventanaconcomponentessintenerquepreocuparsedeasegurarquelosvaloresdeanchoyaltoseansiemprecorrectos.Estoesrealmentetilduranteeldesarrollo,cuandoespocoprobablequesetenganencuentalasdimensionesexactasdeloqueseestcreando, solo se debe colocar true en las propiedades autoheight y autoWidth. Anmejor,estasopcionessepuedenusarseparadamente, loquepermitecolocarunanchofijoperosepuede colocar un largo ajustable y viceversa. Esto es til si se est colocando contenidodinmicoen laventana,peroenestecaso,hayque estar segurosde lasdimensionesde laventananoexcedernlosladosdelapantalla.

    6.3.6Funcionandodentrodeunescritorio

    Elejemplomsgeneralizadodeunsistemadeventanaseselquenosmuestraunescritoriodecomputadora, convariasventanasque representanaplicacionesoelementosdel sistemadearchivos.Endichossistemas,losusuariospuedenesconderventanasparausarlasdespus,opuede minimizarlas ellos tambin son capaces de expandir las ventanas hasta llenar lapantalla o maximizarlas. Estos son trminos familiares y por supuesto son soportados porExt.Windowatravsdelasopcionesdeconfiguracinmaximizableyminimizable.

    Estas caractersticas estn deshabilitadas por defecto, pero pueden ser de utilidad paratrabajarenambientes tipoescritorio.Cuandoseconfigurancon true,vanaaparecernuevosiconosenlapartesuperiorderechadelaventanadeformasimilaralasventanasdelsistemaoperativoMs.Windows.Lapropiedadmaximizablepermitequelaventanaseexpandayllenetodo el espacio disponible en laventana del explorador, como se espera, pero la propiedadminimizable, es un poco ms difcil. Ext JS no sabe donde se va a esconder la ventanaminimizada,queenelcasodelsistemaoperativoMs.Windowsseraalabarradetareas,peropara otros sistemas operativos podra ser en otro lugar. Por lo que se debe programar lafuncionalidaddeminimizaramano,ExtJSproveesolouniconoparaelminimizadoyeleventominimizar que debe ser manejado de manera apropiada para la aplicacin que se estdesarrollando, paraminimizar una ventana de Ext JS, hay que utilizar CSS y programacinadicional.

    6.3.7Otrasopciones

    LaclaseExt.Window, tieneotrosmediosparacambiarelestadorealde lasventanas,yestintegradotododentrodelframework.Lapropiedadbuleanacollapsible,aadeotrobotna lapartesuperiorderechadelaventanaypermitealusuarioencogerlaparaquesemuestresololabarrasuperior.Unsegundoclicexpandelaventana,regresndolaasuestadooriginal.

    Se puede usar tambin la configuracin expandOnShow para especificar que una ventanaescondida siempre debe aparecer expandida a toda su dimensin cuando se muestre de

  • nuevo. Esto es til para las ventanas que han sido escondidas previamente y necesite sertradasdevuelta.

    Ademsdelabarradettuloestndaryelreadecontenidodelcuerpo,sepuedeaadirmsreas de contenido a una ventana. Algunas de estas reas pueden ser completamentepersonalizadas,yalgunassonunpocomsrestrictivas,perojuntasestaspropiedadessonotromtododecrearventanas funcionales.

    Dependiendo de los requerimientos, se puede escoger usar una o ms de estas reas decontenidoparaproporcionarherramientasquepermitanalosusuariosmanipularyconsumirlainformacin dentro de las ventanas.Un tpico ejemplo podra ser crear una ventana con unlayout tipo form, que incluye los botones deGrabar yCancelar en el pie de lamisma.Estorefleja el estilo tpico de una forma de entrada de datos, y puede ser posicionadaautomticamentepormediodeExtJSconunapequeaconfiguracin.

    6.3.8Manipulacin

    Cuandonuestrasventanasestnenlapantalla,tenemosunrangodemtodosquepuedenserusados para cambiar su posicin, apariencia ycomportamiento.De hecho, ya hemos usadounodeestosmtodosennuestrosejemplosshowqueesusadoparadesplegarlaventanaenprimer lugar.Aunquehemosusadoshowen lamayoradeejemplos,estemtodopuedetenertresargumentos,todossonopcionales.

    w.show('animTarget',function(){

    alert('Ahoramostrando')},this)

    Primeramente, podemos especificar une elemento, o el ID de un elemento, para formar elpunto de partida desde el que la ventana deber animarse cuando se abra. Este efectocosmticopuedetambinserespecificadousando laopcindeconfiguracinanimateTarget.Elsegundoargumentoesunacallbackfunction,quesedisparacuando lapresentacinde laventana se ha completado, y el tercer argumento es simplemente el mbito definido para lafuncinqueseejecutar.Resultqueelmtodoshownoeratansimpledespusdetodo.

    Elobviocompaerodeshoweshide.Enefecto,estetomalosmismosargumentos,yharquelaventanadesaparezcade lapantallaparasuposterioruso.Siseestsegurodequenosenecesitarlaventananuevamenteentoncesesprobableusarelmtodoclose,queremuevealaventanadelDOMyladestruye.

    Lafuncionalidaddelosmtodoscloseyhide,semanejanparalosiconosdelaventana.Hayunpocomsdemtodosquepermitentenercontrolsobrelostems,queyahemosvistocomosonminimizeymaximize.Estafuncionalidadbsicaseaumentaconelmtodorestore,queesusado despus de maximizar y retorna la ventana con sus dimensiones originales, ytoggleMaximize,queessimplementeunaccesodirectoentremaximizeyrestore.Yentrminosde configuracin, para que la ventana retorne a su configuracin inicial, usamos el mtodocenter,quecolocalaventanaenelmediodelaventanadelexplorador.

    Tambin se puede manipular la posicin de nuestras ventanas, alignTo permite a undesarrolladorpormediodecdigo,moverunaventanaprximaaotroelementoespecificado.

    Estemtodotienetresparmetros:

    Elelementoalquesevaaalinearlaventana. Laposicindealineamiento Unaposicindedesplazamiento,especificadaenunarraytipo[x,y]

    Estemtodoestilcuandose tieneunaaplicacinconunespaciode trabajodinmico,ysenecesitaasegurarsedeque laventanaaparezcaenel correcto lugaren relacinaotro temque ha sido desplegado previamente. Un til complemento para esta caracterstica es el

  • mtodo anchorTo, que toma los mismos argumentos y permite a una ventana permaneceranclada a otro elemento, incluso cuando la ventana del explorador ha sido cambiada detamaoodedesplazamiento.

    Sibienmuchosde losmtodosde laclaseExt.Window simplementeproporcionanaccesoauna funcionalidad existenteva cdigo, haymuchos otrosms que proporcionan avanzadosescenariosqueseradifcilelaboraramano.

    6.3.9Eventos

    Casitodaslasaccionesquehemoscubiertohastaahoratienensuspropioseventos,quesirvenparacorrernuestropropiocdigopersonalizado.Eleventominimize,esunodelosquehemosmencionadoantes,porquesedebemanejarmanualmenteesteeventosisedeseaqueeliconodelaventanarealicealgo.Idealmente,seesperaquelaventanasealmaceneenunaespeciedereaestilotaskbarparadespusrestaurarla.

    varw=newExt.Window({

    height:50,width:100,minimizable:true

    })w.on('minimize',doMin)w.show()

    Enelejemplodearriba,estamoscreandounanuevaventana,cuyapropiedadminimizable,secoloca en true, y entonces aadimos un evento para que el minimizado funcione, para acontinuacinmostrar laventanaen lapantalla.La funcinquemanejaresteeventoesalgoas:

    functiondoMin(){

    w.collapse(false)w.alignTo(document.body,'blbl')

    }

    Nosotrossimplementeledecimosalaventanaquesecolapseenlapartedeabajomostrandosololabarradelttulo(pasandounparmetrobuleanoconvalorfalsequesimplementeindicaquenodebeanimarlaventana)yentoncesusamoselmtodoalignTo,discutidopreviamente.Conlosparmetrosquehemoselegido,laventanasealinearenlaparteinferiorizquierdadelcuerpodeldocumento,talcomolohicieraunaventananicaenunabarradetareas.

    Porsupuesto,sise tuvieramsventanas, terminaramosconunasuperposicinenpilaenlaparte inferior izquierda lo cul no es ideal en aplicacin del mundo real. Sin embargo, elejemplomuestracomosedebemanejareleventodeminimizado,ypuedeserusadocomounaalternativaalmtodocolapsar.

  • CAP.7.Toolbars,Botonesy Mens

    7.1Creacindebarras

    7.1.1Toolbars

    Una barra de herramientas o toolbar en ingls, se puede colocar en cualquiera de loscontenedoresantesrevisados,yaseaunpanel,unaventana,untabpanelounaforma.

    Todosloscontenedorestienendosbarras,unaarribayotraabajo,sepuedencolocarlasdosouna sola de las dos, la opcin de configuracin para cada una es de la siguiente forma, secolocadentrodelaspropiedadesdecualquiercontadorlosiguiente:

    tbar:Paralabarradearriba(topbar)bbar:Paralabarradeabajo(bottombar)

    Tambinsepuedecrearunatoolbarapartirdesuclaseconstructoradelasiguienteforma:

    newExt.Toolbar({

    renderTo:document.body,items:[{

    xtype:'tbbutton',text:'Button'

    },{

    xtype:'tbbutton',text:'MenuButton',menu:[{

    text:'Better'},{

    text:'Good'},{

    text:'Best'}]

    },{

    xtype:'tbsplit',text:'SplitButton',menu:[{

    text:'ItemOne'},{

    text:'ItemTwo'},{

    text:'ItemThree'}]

    }]})

    7.1.2Botn

    Lacreacindeunbotnesbastantesencilla laprincipalopcindeconfiguracinesel textoquesedesplegarsobreelbotn.Sepuedeaadirtambinuniconoparaserutilizadojuntoaltextosisedeseahacerlo.Acontinuacinlasintaxis:

  • {xtype:'tbbutton',text:'Button'

    }

    Estebotnsedebecolocarenunabarrasuperioroinferior,delasiguienteforma:

    varw=newExt.Window({

    title:'Miventana',height:500,width:500,

    tbar:[{

    xtype:'tbbutton',text:'Clickme'

    }]})

    7.1.3Men

    Unmen,noesnadamsqueunbotnconunmendesplegable,esmuysimple tambin.Los temsdelmentrabajanconlosmismosprincipiosde losbotones.Puedentener iconos,clasesymanejadoresasignadosaellos.Lostemsdelmenpuedentambinagruparsejuntosparaformarunconjuntodebotones,peroprimerosedebecrearunmenestandar:

    Estaeslaconfiguracintpicaparaunmen:

    {xtype:'tbbutton',text:'Button',menu:[{

    text:'Better'},{

    text:'Good'},{

    text:'Best'}]

    }

    Comosepuedever,unavezque laconfiguracindel arraydemensestdesarrollada, losmenscobranvida.Paraagruparestostemsdemenjuntos,senecesitacolocarlaopcindeconfiguracingroupconunvalorigualparacadagrupoquesedeseecolocar,ademssedebecolocarbuleanopositivoparacadaitem:

    {xtype:'tbbutton',text:'Button',menu:[{

    text:'Better',checked:true,group:'quality'

    },{

    text:'Good',checked:false,group:'quality'

    },{

    text:'Best',checked:false,group:'quality'

    }]}

  • 7.1.4Botnsplit

    Elbotnsplitesunbotnestndarynoesunmencombinado,conunpequeogiro.Perousandoestetipodebotn,sepuedeusarlafuncionalidaddeunbotn,mientrasqueseaadelaopcindeseleccionarunitemdelmenadjunto.Alhacerclicenlaparteizquierdadelbotnque contiene el texto, se activa la accin del botn. Sin embargo, al hacer clic en el ladoderechodelbotn,quecontieneunapequeaflechahaciaabajo,seactivaelmen.

    {xtype:'tbsplit',text:'SplitButton',menu:[{

    text:'ItemOne'},{

    text:'ItemTwo'},{

    text:'ItemThree'}]

    }

    7.1.5Alineacin,divisoresyespacios

    Por defecto, los elementos de una barra de herramientas se alinean a la izquierda.No hayconfiguracindealineamientoparaunabarra,porlotantosisedeseaalineartodoslosbotonesaladerecha,senecesitaaadirunespaciolleno,comoelprimerelementodeunabarra.Sisequieretenertemsdivididosentreellosalaizquierdayaladerecha,tambinsepuedeutilizarunespaciolleno:

    {xtype:'tbfill'

    }

    Sedebecolocaresteelementoenunabarradondesedeseeaadirunespacioyserequieraquelostemsseanempujadoshaciaelfinaldelabarra.

    Tambinsepuedecolocarseparadoresconunospocospixelsdeespaciovacoquepuedenserusadosparadarespacioentrebotones,omoverloselementosfueradelbordedelabarra:

    {xtype:'tbspacer'

    }

    Undivisortambinpuedesercoladodelamismaforma:

    {xtype:'tbseparator'

    }

    7.1.6Accesosdirectos

    ExtJStienevariosaccesosdirectosquepuedenserusadosparahacercdigomsrpido.Losaccesosdirectossonunoodoscaracteresquepuedenserusadosen lugardeunobjetodeconfiguracin.Porejemploconsiderandounllenadoestndardeunabarra:

    {xtype:'tbfill'

    }

  • Elaccesosparaunllenadodeunabarraesunguinconunsmbolodemayorque:

    >

    Notodoslosaccesosdirectosestndocumentados.Aquestlalistadelosaccesosdirectosdeusocomn:

    Componente Accesodirecto Descripcin

    Llenado '>' Elllenadoofilleningls,esutilizadoparaempujarhacialaderechalostemsdeunabarra

    Separador '' Esunabarraverticalqueesusadaparavisualizarlostemsdeformaseparada

    Espaciador ''Espacioenblancousadoparasepararvisualmentelostems.Elespacioesdedospxeles,perosepuedecambiarreemplazandolaclaseCSSytbspacer

    Textodetem Cualquiertexto AgregacualquiertextooHTMLdirectamenteenlabarradeherramientasconsolocolocarestetextoentrecomillas

    7.1.7Botonesdeiconos

    Elbotnestndarpuedeactuarcomounbotndeiconooiconbuttoneningls,comolosquesevenen loseditoresde textoparacolocarnegritaso itlicas.Senecesitandospasosparatransformarunbotnsimpleenunbotnconicono:

    Sedebedefinirlaimagenqueserusadacomoicono Yaplicarlaclaseapropiadaalbotn

    {xtype:'tbbutton',cls:'xbtnicon',icon:'imagenes/arrow.gif'

    }

    Tambinpodramoscolocaruniconoaladodeltextodeunbotndelasiguienteforma:

    {xtype:'tbbutton',cls:'xbtntexticon',icon:'imagenes/arrow.gif',text:'Flecha'

    }

    7.1.8Manejadoresdebotones

    Un botn necesita hacer ms que solo lucir bonito, necesita reaccionar a una accin delusuario.Aquesdondeentranenaccinlosmanejadoresohandlerseningls.Unhandleresunafuncinqueesejecutadacuandounbotnoitemdemenespresionadoconunclic.

    Laconfiguracindelhandleresdondeseaadeunafuncin:

    {xtype:'tbbutton',text:'Mensaje',handler:function(){Ext.Msg.alert('Mensaje','Enviadodesdeelboton')}

    }

  • Estecdigodesplegarunmensajetipoalertaaldarclicalbotn.Algunasvecessenecesitaqueserealicencambiosalbotncuandosepresiona,esasqueelmanejadordelbotnpasauna referencia a s mismo para este propsito. El primer argumento de la funcin es unareferenciaalcomponentequedisparaelevento.

    {xtype:'tbbutton',text:'Boton',

    handler:function(f){f.disable()}}

    Sepuedetomarestareferenciaasmismoyaccederatodaslaspropiedadesyfuncionesdelbotn.Porejemplo,alllamaralafuncindisable(),elbotnsetransformaacolorgris.

    7.1.9Cargarcontenidoconelclicdeunbotn

    Vamosahaceralgomstil enel clicdeunbotn.Paraeste ejemplovamosaaadirunaopcin de configuracin a cada tem de un men que ser usado para determinar quecontenidodearchivosecargarenelcuerpodeunapgina:

    {xtype:'tbsplit',text:'Help',menu:[{

    text:'Genre',helpfile:'genre',handler:Movies.showHelp

    },{

    text:'Director',helpfile:'director',handler:Movies.showHelp

    },{

    text:'Title',helpfile:'title',handler:Movies.showHelp

    }]}

    Ntesequetenemosunaopcindeconfiguracin.

  • Referenciabibliogrfica

    SheaFrederick,ColinRamsay,SteveCutterBlades(2008)LearningExtJS. FrankW.Zammetti(2009)PracticalExtJsprojectswithGears. JesusD.GarciaJr(2009)ExtJsinAction.

  • ReferenciasdeInternet

    Wikipedia http://www.desarrolloweb.com http://www.tierradenomadas.com/tw006.phtml

    http://www.desarrolloweb.com/http://www.tierradenomadas.com/tw006.phtml