Como armazenar em cache a instância de subcomponentes nos componentes
Muitos dos exemplos do Sencha Touch que encontrei on-line, não se concentram no encapsulamento de visualização adequado. Assim, o Controlador ouve o evento de cada botão, mesmo que o botão esteja aninhado dentro de uma visão. Em outras palavras, os internos da visão vazam, o que nunca é uma coisa boa.
Eu encontrei um bom tutorial que incentiva você a criar visualizações significativas que escutam eventos locais e criam eventos de negócios significativos, etc.
http://miamicoder.com/2012/how-to-create-a-sencha-touch-2-app-part-2/
No entanto, uma coisa que não consegui descobrir até agora é como armazenar em cache as instâncias de componentes aninhados. Considere este exemplo:
Ext.define("NotesApp.view.NotesListContainer", {
extend: "Ext.Container",
alias: "widget.noteslistcontainer",
initialize: function () {
this.callParent(arguments);
var newButton = {
xtype: "button",
text: 'New',
ui: 'action',
handler: this.onNewButtonTap,
scope: this
};
var topToolbar = {
xtype: "toolbar",
title: 'My Notes',
docked: "top",
items: [
{ xtype: 'spacer' },
newButton
]
};
this.add([topToolbar]);
},
onNewButtonTap: function () {
console.log("newNoteCommand");
this.fireEvent("newNoteCommand", this);
},
config: {
layout: {
type: 'fit'
}
}
});
Digamos que queremos adicionar um métodosetSpecialUIState
para nossoNotesListContainer
. Quando é chamado, queremos fazer algo com onewButton
(por exemplo, esconda). Como eu ganharia acesso aonewButton
exemplo sem abusarExt.getComp()
por isso? Posso definir como uma variável de instância? Como é o caminho canônico?
ATUALIZAR
Eu apenas tentei isso, como Nikolaj Borisik sugeriu.
this._newButton = this.add([{
xtype: "button",
text: 'New',
ui: 'action',
handler: this.onNewButtonTap,
scope: this
}];
Isso funciona como um encanto. Eu só não sei se é idiomático fazê-lo ou se há alguma desvantagem que eu possa estar faltando. Caso contrário, eu recomendo fazer isso. Sencha de lado, é muito melhor compor visões significativas que abstraem partes coerentes da interface do usuário. Isso é muito melhor do que vazar todos os botões até o controlador e mexer diretamente com eles.
Então, eu me pergunto se há alguma desvantagem dessa abordagem?