我正在尝试创建一个组件并在控制器内访问它。但是,当通过id访问组件时,它不会返回组件。它总是返回undefined。请在下面找到代码。
在这里输入代码
//Component creation in view layer as below
Ext.define('MyApp.view.performance.grid.IFrameGridCmp', {
extend: 'Ext.panel.Panel',
alias: 'widget.crMainPanel',
id:'mainPanelId',
layout: {
align: 'stretch',
type: 'vbox'
},
border:0,
resizable: false,
forceFit: true,
autoWidth: true,
initComponent: function() {
Ext.apply(this, {
items: [
{
xtype:'panel',
flex:.02,
border:0
},
{
xtype:'crHeaderPanel',
flex:.05
},
{
xtype: 'crUpperPanel',
flex: 0.93
},
Ext.create('Ext.Component', {
autoEl: {
tag: 'iframe',
cls: 'x-hidden',
src: Ext.SSL_SECURE_URL
},
id:'FileDownloader',
height:0,
listeners: {
afterrender: function () {
this.getEl().on('load', function () {
console.log('loaded download frame');
});
}
},
load: function(config){
var e = this.getEl();
e.dom.src = config.url + (config.params ? '?' + Ext.urlEncode(config.params) : '');
e.dom.onload = function() {
Ext.getBody().unmask();
if(e.dom.contentDocument.body.childNodes[0].wholeText == '404') {
Ext.Msg.show({
title: 'Attachment missing',
msg: 'The document you are after can not be found on the server.',
buttons: Ext.Msg.OK,
icon: Ext.MessageBox.ERROR
});
}
};
}
})
]
});
this.callParent(arguments);
}
});
========================================
enter code here
//Accessing the controller as below in controller
views: ['performance.grid.IFrameGridCmp'],
//The below line gives error
var downloader = Ext.getCmp('FileDownloader');
downloader.load({
url: '/APXUI/data/json/xls?exportData='+Ext.JSON.encode(records)
});
答案 0 :(得分:2)
嗯,在您致电Ext.getCmp()
请注意,views: ['performance.grid.IFrameGridCmp'],
只是一种绑定到控制器的视图,这意味着控制器将为您创建一个getter,仅此而已。您仍需要通过调用.create();
或Ext.widget('crMainPanel')
答案 1 :(得分:0)
在你的控制器中使用控件来处理它:
me.control({
'crMainPanel #FileDownloader': {
afterrender: me.addDownloader
}
});
不要使用Ext.getCmp()它真的很慢,你会遇到很多问题。 不要使用id - 更好地使用itemId。 为什么需要从控制器调用它?