我制作一个简单的MVC应用程序,有一个app.js'
Ext.application({
name: 'ImpPdf',
extend: 'ImpPdf.Application',
autoCreateViewport: true
});
有一个' application.js'
Ext.define('ImpPdf.Application', {
name: 'ImpPdf',
extend: 'Ext.app.Application',
views: [
'Main'
],
controllers: [
'Main'
],
stores: []
});
拥有' viewport.js'
Ext.define('ImpPdf.view.Viewport', {
extend: 'Ext.container.Viewport',
requires:[
'Ext.layout.container.Fit',
'ImpPdf.view.Main'
],
layout: {
type: 'fit'
},
items: [{
xtype: 'app-main'
}]
});
拥有一个控制器' Main.js'
Ext.define('ImpPdf.controller.Main', {
extend: 'Ext.app.Controller',
views: 'Main',
refs: [
{ ref: 'appMain', selector: 'appmain', xtype: 'app-main' }
],
init: function() {
console.log('Main.Controle');
console.log(this.getAppMain());
this.control({
'appmain tabpanel': {
click: this.onTabChange
}
});
},
onTabChange: function(tabPanel, newCard, oldCard, eOpts) {
console.log('tabchange');
}
});
观看' Main.js'
Ext.define('ImpPdf.view.Main', {
extend: 'Ext.container.Container',
requires:[
'Ext.tab.Panel',
'Ext.layout.*',
'Ext.ux.GroupTabPanel'
],
alias: 'widget.appmain',
xtype: 'app-main',
layout: {
type: 'border'
},
defaults: {
bodyBorde: false,
split: true,
bodyPadding: 0
},
items: [
header,
west,
contentPanel
]
});
问题是,我无法获得对控制器中视图的引用。 控制台显示我未定义。的console.log(this.getAppMain());
我需要一个tabpanel'得到一个'tabchange>事件。
答案 0 :(得分:0)
别名&是同义词:
alias: 'widget.appmain',
xtype: 'app-main',
它们应该是相同的,选择器应该只匹配一个。
答案 1 :(得分:0)
视图的xtype是app-main,你的引用应该是:
refs: [
{ ref: 'appMain', selector: 'app-main' }
]
ref创建的getter是getAppMain()
另请注意,您不应同时使用xtype和别名。这是区别:
xtype是对组件的引用。它用于定义子组件。
别名是组件的配置。它定义了它的xtype,可以在组件查询中用作选择器(如ref所做)。
Ext.define('myForm', {
alias: 'widget.myForm',
items: [
{xtype: 'button'},
{xtype: 'textfield'}
]
可以用xtype:'myForm'替换别名:'widget.myForm',在这种特殊情况下它们是同义词。两者都会做同样的事情,但它很混乱,因为你使用xtype来完成两个完全不同的东西(引用一个组件并定义它将被引用的xtype)。
要继续:alias定义xtype,ref的selector属性使用组件查询来选择getter返回的组件。