versao quatro do framework trouxe para nos desenvolvedores.Utilizando o atributo config da classe Ext.Class podemos informar um objeto com os atributos que devem ser criados automaticamente os metodos getters e setters. A nomenclatura desses metodos seguem o padrao get[NomeDoAtributo] e set[NomeDoAtributo], onde o valor de [NomeDoAtributo] sera o nome do atributo com a primeira letra em maiuscula. Como por exemplo, o atributo "name" teria os metodos setName e getName criados. Veja o exemplo abaixo:// Definindo a nova ClasseExt.define('User', { config: { name: '' ,email: '' ,type: 0 } // Iniciando a classe ,constructor: function(cfg) { this.initConfig(cfg); }});// Instanciando a nova Classevar aluno = new User({ name: 'Legolas' ,email: 'legolas@mail.com' ,type: 1});console.log('Name:' + aluno.getName());console.log('E-mail:' + aluno.getEmail());console.log('Type:' + aluno.getType());// Atualizando os dadosaluno.setName('Hiei');console.log('Name (update):' + aluno.getName());Note que nas linhas #3 a #7 foi informado no atributo config as propriedades da classe que necessitam da criacao dos metodos getters e setters automaticamente. E no seu metodo construtor linha na #10 executamos o metodo initConfig da classe Ext.Base para criar os metodos e aplicar os valores nos atributos.No exemplo acima temos que chamar o metodo initConfig, pois estamos criando uma classe que nao possui os metodos da classe base, ou seja, nao estamos utilizando heranca (extend) nesta classe. Assim deve ser chamado esse metodo no construtor.Quando utilizamos heranca, implicitamente o metodo initConfig e chamado na criacao da classe. Assim devemos so informar no atributo config os atributos que necessitam da criacao dos metodos getters e setters. Abaixo temos um outro exemplo utilizando a heranca do ExtJS, neste e criado uma nova classe "MyPanel" que herda (extend) da classe Ext.panel.Panel.Ext.onReady(function(){ // Definindo a nova classe Ext.define('MyPanel', { extend: 'Ext.panel.Panel' ,alias: 'widget.mypanel' ,width: 320 ,height: 100 ,title: 'Meu Panel' ,bodyPadding: 10 // Atributos que devem ser gerados os metodos ,config: { userId: null ,userName: null } ,initComponent: function() { var me = this me.html = me.getHtmlString() me.callParent(arguments); } /** * Gerando o HTML a ser exibido no body do panel * @return HTML com o texto formatado */ ,getHtmlString: function() { var me = this; return Ext.String.format('O usuario {0} esta atenticado com o ID {1}', me.userName, me.userId); } }); // Metodo que ira resgatar os valores dos atributos var getData = function(btn) { var panel = btn.up('mypanel'), msg = Ext.String.format('Atributo "userId": {0} Atributo "userName": {1}', panel.getUserId(), panel.getUserName()); Ext.Msg.alert('Valores atuais', msg); }; // Metodo que ira atualizar os valores dos atributos // utilizando os metodos getters e setters criados var updateValues = function(btn) { var panel = btn.up('mypanel'); // Alterando os valores dos atributos panel.setUserId(2); panel.setUserName('Kakashi'); }; // Atualizando o HTML do Panel var updatePanel = function(btn) { var panel = btn.up('mypanel'); panel.update(panel.getHtmlString()); }; // Criando a nova classe var panel = Ext.create('MyPanel', { userId: 1 ,userName: 'Legolas' ,renderTo: Ext.getBody() ,dockedItems: [{ xtype: 'toolbar' ,dock: 'bottom' ,items: [{ text: 'Resgatar dados' ,handler: getData }, { text: 'Alterar valores' ,handler: updateValues }, { text: 'Atualizar panel' ,handler: updatePanel }] }] });});Veja por esse exemplo que nao necessitamos da chamada do metodo initConfig para a criacao dos metodos, pois estes foram criados na definicao da classe. Neste exemplo os botoes "Resgatar dados"