控制器没有获得视图的引用

时间:2014-07-30 22:19:10

标签: javascript extjs extjs4.2

我制作一个简单的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>事件。

2 个答案:

答案 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返回的组件。