可以告诉我为什么我一直在获取未在以下代码中定义的方法buildItems?我逃避了必不可少的事情吗?
Ext.define('MyApp.view.Viewport', {
extend: 'Ext.container.Viewport',
requires: [
'Ext.layout.container.Border'
],
layout : 'border',
items : [this.buildItems()],
buildItems : function() {
return { region:'center',xtype:'panel'}
}
});
buildItems方法没有理由成为公共方法,我只是先尝试这种方式。这就是我现在这样做的方式:
(function() {
function buildItems () {
return [
{
region : 'center',
xtype : 'panel',
}, {
region : 'west',
xtype : 'panel',
width : 225
},{
region : 'south',
xtype : 'panel',
height : 50
},{
region : 'north',
xtype : 'panel',
height : 50
}
]
}
return Ext.define('MyApp.view.Viewport', {
extend: 'Ext.container.Viewport',
requires: [
'Ext.layout.container.Border'
],
layout : 'border',
items : buildItems()
});
})();
这是一个过度扩张吗?
THX
答案 0 :(得分:1)
问题是:在执行行
时items : [this.buildItems()],
范围是全局对象,即this
评估为window
。
您不应该将items
放入类中,因为实例可能会修改item
的项目,因此正确的方法是
initComponent: function () {
this.items = this.buildItems(); // now, "this" is the current component instance
// superclass.initComponent...
}
编辑:作为问题第二部分的答案
已经讨论了一百万次,并且将辅助函数设置为私有没有任何问题。我个人倾向于公开方法,因为这增加了代码的可读性。通常我使用doc注释(@private
)作为标记,并且完全避免调用所谓的私有方法。我认为这不是什么大问题,因为我主要不是为第三方开发人员构建库或任何可重用的东西。
答案 1 :(得分:0)
这是因为该函数在另一个函数中定义,并且视口将在此自执行函数之外访问。因此,将此buildItems()置于自执行函数之外并尝试相同。