我在网上找到了很多 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()
?我可以将其设置为实例变量吗?规范的方式如何?
更新
我只是按照 Nikolaj Borisik 的建议尝试了这个。
this._newButton = this.add([{
xtype: "button",
text: 'New',
ui: 'action',
handler: this.onNewButtonTap,
scope: this
}];
这就像一个魅力。我只是不知道这样做是否符合习惯,或者是否有任何我可能遗漏的缺点。否则我强烈建议这样做。撇开 Sencha 不谈,编写有意义的视图来抽象出连贯的 UI 部分要好得多。这比将每个按钮都泄漏到控制器并直接摆弄它们要好得多。
所以我想知道这种方法是否有任何缺点?