sencha examples javascript extjs extjs4

javascript - examples - sencha



Mejores prácticas sobre initComponent() en Ext.define() (3)

No recibo tu pregunta exactamente, pero esto puede ser útil para ti.

Ext.define(''My.Group'', { // extend: ''Ext.form.FieldSet'', xtype : ''fieldset'', config : { title : ''Group'' + i.toString(), id : ''_group-'' + i.toString() }, constructor : function(config) { this.initConfig(config); return this; }, collapsible: true, autoScroll:true, ..... });

puedes usarlo de la siguiente manera

handler : function() { i = i + 1; var group = new My.Group({ title : ''Group'' + i.toString(), id : ''_group-'' + i.toString() }); // console.log(this); // console.log(group); Ext.getCmp(''panelid'').insert(i, group); Ext.getCmp(''panelid'').doLayout(); }

Estoy escribiendo todos mis componentes en la nueva moda MVC de ExtJS usando Ext.define() .

Me cuesta un poco si definir propiedades dentro de initComponent() o simplemente configurándolos como property: 42, initComponent()

¿Hay mejores prácticas ampliamente aceptadas?

Estoy initComponent() entre usar initComponent() solo cuando es necesario (es decir, cuando quiero algo dinámico o establecer un alcance) que mantiene la función más corta y me ahorra algo de feo this. y usarlo siempre que tiene el beneficio, que nunca tendría que mover las propiedades anteriores a initComponent() solo porque quiero hacerlo más dinámico.

Desafortunadamente, los documentos de Sencha no dicen mucho sobre eso y los ejemplos disponibles parecen hacer lo que quieren.


Práctica personal, declararé variables en el área de propiedades cuando el

  • variables que definen la magnitud, como x , y , width , height
  • variables que esperan ser anuladas o personalizables, como title , saveBtnTxt , url , fields , iconCls
  • algunas constantes, que tendrán prefijos especiales, por lo que no se anularán tan fácilmente

Luego declararé items , listeners , this.on , Ext.apply(me, {..}) o cualquier cosa que requiera el alcance del obj ( this , me ), para sentarme dentro de mi initComponent . O cosas que deberían modificarse / anularse antes de que todo se configure para que el usuario no rompa mi componente anulando algunas de las variables importantes.

Por supuesto que servirá como mi guía. 2 centavos

EDITAR

Sobre lo feo de this , he utilizado la variable ampliamente en mi aplicación, y se ve mucho más limpio que this . Me beneficia cambiar los ámbitos también con menos frecuencia.


Quiero agregar a la respuesta de Lionel que es mejor declarar cualquier configuración no primitiva en initComponent . (Por primitivo quiero decir cadena, booleano y número). Array y Object entran en initComponent .
Entonces la definición debería verse así:

Ext.define(''My.NewClass'', { extend: ''OldClass'', // here all primitive configs: cls: ''x-my-cls'', collapsible: true, region: ''west'', // and so on ... initComponent: function() { // here you declare non-primitive configs: this.tbar = [/* blah-blah */]; this.columns = [/* blah-blah */]; this.viewConfig = {/* blah-blah */}; // and so on ... this.callParent(arguments); } // other stuff }

La razón por la que debe poner todas las configuraciones no primitivas en initComponent es que, de lo contrario, las configuraciones de todas las instancias se referirán a los mismos objetos. Por ejemplo, si define NewClass como:

Ext.define(''My.NewClass'', { extend: ''OldClass'', bbar: Ext.create(''Ext.toolbar.Toolbar'', { // ...

bbar s de todas las instancias se referirá al mismo objeto. Y, por lo tanto, cada vez que crea una nueva instancia, bbar desaparece de la instancia precedente.