bueno queria contar unas ideas que me surgieron luego de usar bastante ext, no son nada novedosos, la mayoria las aprendí con Delphi5 pero no se me hubiese ocurrido implementarlas en ext.
Para alguien que no conozca otra cosa que web, le va a abrir la cabeza.
1º, un buen ide.
Normalmente para programar, con el notepad ya basta (kwrite en mi caso, q tiene infinitas mas funcionalidades que el notepad (code highlighting de infinidad d lenguajes, y colapsa bloques d codigo pej))
Un ide ta lleno de boludeces, pero la verdad que son esas boludeces las que marcan la diferencia entre programar rápido, y morirse de hambre de camino.
El ide que hasta ahora mas me ha gustado es el eric, para programar en python, y tiene algunas cosas para otros lenguajes.
pero hace poco lo están pasando a qt4, y ha empezado a fallar, coincidentemente, cuando (casi) agarramos un laburo con un amigo de mi hna, (el tipo despues d confirmarnos nos cambio por otros que le vendian un programa ya hecho) entre en contacto con el ide de netbeans, buscando por ahi encontré que tambien se puede usar para python

(entre otros)
la verdad que es muy avanzado, analiza el codigo y te crea las clases, con sus metodos y propiedades. Sonará una tontera en un programa hasta del tamaño del kafx (q es bastante chico), pero cuando tenés mas de 2000 lineas de codigo (casi indocumentado) y solo para un archivo, se vuelve muuuy util, sobretodo cuando hay que ir y volver en varias clases en el mismo archivo.
Tiene la capacidad de analizar de donde importaste que, en donde se definen las clases, las variables, y puede poner ayuda sobre los métodos que lo tengan. realmente muy util.

pero lo que más me gustó es que tiene un buen análisis sintáctico, encuentra errores no solo de sintaxis, sinó posibles errores, como variables no usadas, nunca definidas, y cosas rarísimas, como por ejemplo:

o este, que es con el que estoy laburando ahora, con 4000 lineas...

me viene bien porque en ext yo uso python y jscript. y los ds los maneja el netbeans, con artualizaciones automaticas (aunque prefiero el apt) e integrado con svn. lo unico malo q tiene es que come mucha memoria (300mb maso, q es mucho si necesitas ademas apache mysql el opera y el firefox y el amarok por supuesto)
de igual manera ya me ha hecho ahorrar bastante tiempo.
Volviendo a ext. No soy fanático de las webs, (las odio) menos de ext, y mucho menos de javascript...
pero lo que tiene ext, es q es mucho mejor que programar en javascript+html, hasta t permite usar tecnicas de programación orientada a ocjetos y RAD.

lo primero que vi para mejorar el código, es, tratár de usar lazys config (o init) lo mas posible.
por lo menos a mi me parece lo más lindo.
this.customerNameInput = new Ext.form.TextField({
anchor: '100%',
name: 'customer_name',
allowBlank: false
});
this.newCustomerPanel = new Ext.Panel({
border: false,
layout:'column',
anchor: '100%',
style: "padding-bottom: 6px",
hidden: true,
defaults:{layout: 'anchor', border: false},
items: [
{
columnWidth: 0.5,
bodyStyle: {paddingRight: '8px'},
items: [this.customerNameInput]
},
este tipo de codigo tiene que ser ejecutado dentro de una función...
o podes ponerlo asi:
this.newCustomerPanel = new Ext.Panel({
border: false,
layout:'column',
anchor: '100%',
style: "padding-bottom: 6px",
hidden: true,
defaults:{layout: 'anchor', border: false},
items: [
{
columnWidth: 0.5,
bodyStyle: {paddingRight: '8px'},
items: [{
xtype:'textfield',
anchor: '100%',
name: 'customer_name',
allowBlank: false
}]
}]});
se ve mas enredado, pero a la larga es mas sencillo. ademas todo eso de andar moviendo los this por todos lados es muy hinchapelota y peligroso.
una de las cosas que no se si funciona bien o no, es crear un nuevo objeto en la declaración del lazy init...
realmente aun no entiendo los principios de las clases en ext, y menos entiendo lo de lazy init...
this.newCustomerPanel = new Ext.Panel({
border: false,
layout:'column',
anchor: '100%',
style: "padding-bottom: 6px",
hidden: true,
defaults:{layout: 'anchor', border: false},
items: [
{
columnWidth: 0.5,
bodyStyle:{paddingRight: '8px'},
items: [
new Ext.button({text:'hola'})
]
}
Otra de las cosas muy importantes, y que luego sirve con el siguiente cometnario que haré es declarar las funciones a parte, no inline, como?
bueno, como les dije, programando en ext es comun poner :
brandCmb.on({
select: function(){
//hacemos request, calculamos el md5,
// salvamos a la tierra y notificamos.
alert('You Suck');
}})
pero he descubierto que es mejor algo como esto:
brandCmb.on({
select: OnBrandSelect,
scope:this
})
//...........
//dentro de la clase padre
OnBrandSelect: function(){
//hacemos request, calculamos el md5,
//salvamos a la tierra y notificamos.
alert('You Suck');
}})
aparentemente no hay cambio, ahora, recuerden : 4000 lineas, tenemos clases, que tienen las funciones dentro de donde se declaran los objetos hijos... te vuelve loco buscar algo!!!
y recordé que es la forma en que delphi lo hace, al principio, define una clase genérica para cada form, aunque se use una sola vez.
y debajo se declaran las funciones, lo mismo pasa en c por ejemplo, que tiene la declaracion de las clases inclusive en un archivo diferente, aunque tambien permite el inline, por lo que en c se puede programar algo como el primer ejemplo.
ahora las tecnicas,
en delphi todo está altamente clasificado,
vos tenés un formulario, por ejemplo, que es subclase de una ventana, que es subclase de un objeto. y el formulario que vos creas, es otra subclase.
el tema es que nunca pasé de usar controles estandard,
en esta aplicación me encontré cosas como.. que yo hacia un panel, que adentro tenía un arbol, con una url y un comportamiento, y una caja de busqueda, que interactuaba con el arbol.
pero eso, tenia que usarlo dos veces, lo que primero se viene a la cabeza (ademas de foo) es duplicar el codigo.
Pero después me acordé de algo que leí fugazmente en el foro, extender clases. (o como lo llaman "pre-configured class")
y me acordé de un ejemplo de delphi, donde se creaba una clase de un formulario, que era un PasswordForm (nombreinventado) que tenia labels, textboxs y botones como para pedir nombre de usuario, contraseña y aceptar. No parece muy util, pero eso es reutilización.
"Instanciando" una de esas clases, vos tenias un dialogo para contraseña y luego metías el codigo necesario.
Una de las cosas copadas es esa. imaginen un panel que muestra imagenes, puede ser algo como esto (nota, probablemente este cod no funcione, lo hago d memoria nomas)
imagePanel = Ext.extend(Ext.panel({
store : Ext.data.JSonStore({url:.......
//codigo para cargar imagenes y todo.
items:[
new Ext.panel({
//panel para mostrar imagen
listeners:[{
OnDoubleClick: {
handle: this.OnImageClick,
scope: this
}}]
///... demas cosas.
}
//Y entonces, en alguna ventana, podemos crear un panel para mostrar
imagenes.
otraVentana = Ext.Window({
items:[ new imagePanel({
url:'urlaimagenespr0n',
OnImageClick:this.OnImageDelPanelClick}) ],
OnImageDelPanelClick: function(){
//Esto reemplazaria el OnImageClick del ImagePanel anterior..
this.......
}
})
no se ve muy claro porque ext es algo complejito para hacer ciertas cosas, pero la idea está, y esta bastante bueno porque corta mucho tiempo,
incluso lo que he hecho, es declarar una clase con el arbol, otra con un panel, y luego un panel maestro que contiene a ambos, agrega un botón al panel con el arbol, y maneja ambos.
esa es mas o menos la idea. incluso creo que muchos componentes de ext están armados de esa manera. el jsonstore desciende del store y asi...
bueno ya se me hizo tarde y largo, la proxima si puedo pongo un poquito como usar el firebug para depurar un poco
aunque es taaaaaaan lerdo que molesta. pero es la unica forma (Además del alert.... q es peor)
por cierto, el colorcito lo hice con esto
http://www.tohtml.com/
se lo recomiendo a mis amigos scripteros asi lo usan en sus blogs, anque creo haber visto un par ya