我遇到了代码中“愚蠢”部分的问题,对我来说,这应该是正常的,但我不明白为什么它会给我带来问题:
控制器
Ext.define('FedertrekDesktop.controller.Taskbar', {
extend: 'Ext.app.Controller',
views: [
'taskbar.Toolbar',
//'taskbar.Button'
],
showWindow: function(windowName, image, title) {
//var btn = Ext.create('FedertrekDesktop.view.taskbar.Button', windowName, image, title);
//this.getView('taskbar.Toolbar').insert(0, btn);
console.log("tmp: "+this.getView('taskbar.Toolbar').printMsg());
//console.log('msg: '+this.getView('taskbar.Toolbar').getName());
console.log('Create window '+windowName+' '+image);
}
});
查看
Ext.define('FedertrekDesktop.view.taskbar.Toolbar', {
extend: 'Ext.toolbar.Toolbar',
alias : 'widget.taskbartoolbar',
items: [
{
xtype: 'tbfill'
},
{
xtype: 'tbseparator'
},
{
xtype: 'button',
enableToggle: true,
text: 'Tasks'
}
],
printMsg: function() {
console.log("printmsg");
}
});
实际上我只是尝试调用该自定义函数(printMsg)进行测试。然而似乎缺少这个功能,我真的不明白为什么。我在这里缺少什么?
错误:this.getView(“taskbar.Toolbar”)。printMsg不是函数
任何建议表示赞赏
答案 0 :(得分:2)
我自己用refs解决了这个问题
结果代码是这一个:
Ext.define('FedertrekDesktop.controller.Taskbar', {
extend: 'Ext.app.Controller',
views: [
'taskbar.Toolbar',
'taskbar.Button'
],
refs: [
{
ref: 'taskbarView',
selector: 'taskbartoolbar'
}
],
showWindow: function(windowName, image, title) {
//var btn = Ext.create('FedertrekDesktop.view.taskbar.Button', windowName, image, title);
//var btn = Ext.create('Ext.button.Button', { text: "Bla" });
//this.getView('taskbar.Toolbar').insert(0, btn);
//var tmp = this.getView('taskbar.Toolbar').create();
//tmp.add(btn);
var tmp = this.getTaskbarView();
tmp.printMsg();
//console.log('msg: '+this.getView('taskbar.Toolbar').getName());
console.log('Create window '+windowName+' '+image);
}
});
据我所知,ExtJS不会像你想象的那样在你的控制器中创建对视图的引用,你必须指定它们!
它们提供了参考的强大功能,这些功能记录在Controller和ComponentQuery上
使用它们后,我觉得我的代码令人满意。我发布的那个只是一个例子,但从这一点来说,使用 insert 方法有效地向视图添加内容并不难。
答案 1 :(得分:1)
this.getView('taskbar.Toolbar').create().printMsg()
这有用吗?根据文档,getView(String name)
返回Ext.Base,它没有你的printMsg函数。