Как кэшировать экземпляр подкомпонентов внутри компонентов
Множество примеров Sencha Touch, которые я нашел в Интернете, на самом деле не фокусируются на правильной инкапсуляции вида. Таким образом, контроллер прослушивает каждое отдельное событие кнопки, даже если кнопка глубоко вложена в представление. Другими словами, внутренности зрения просачиваются сквозь которые никогда не бывает хорошо.
Я нашел один хороший учебник, который побуждает вас создавать осмысленные представления, которые слушают местные события и поднимают значимые деловые события и т. Д.
http://miamicoder.com/2012/how-to-create-a-sencha-touch-2-app-part-2/
Однако одна вещь, которую я до сих пор не могу понять, это как лучше всего кэшировать вложенные экземпляры компонентов. Рассмотрим этот пример:
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'
}
}
});
Допустим, мы хотим добавить методsetSpecialUIState
нашимNotesListContainer
, Когда он вызывается, мы хотим что-то сделать сnewButton
(например, скрыть это). Как бы я получить доступ кnewButton
экземпляр без злоупотребленияExt.getComp()
для этого? Могу ли я установить его в качестве переменной экземпляра? Как устроен канонический путь?
UPDATE
Я просто попробовал это, как предложил Николай Борисик.
this._newButton = this.add([{
xtype: "button",
text: 'New',
ui: 'action',
handler: this.onNewButtonTap,
scope: this
}];
Это работает как шарм. Я просто не знаю, идиоматично ли это делать или есть какие-то недостатки, которые я мог бы пропустить. В противном случае я очень рекомендую это сделать. Сенча, кроме того, гораздо лучше составлять осмысленные представления, которые абстрагируются от последовательных частей пользовательского интерфейса. Это намного лучше, чем просачивать каждую кнопку в контроллер и возиться с ними напрямую.
Поэтому мне интересно, есть ли недостатки этого подхода?