0

我正在开发一个有几个窗口的应用程序。许多窗口都是相似的,所以我想写一个超类,并扩展它。

我有,超类:

Ext.define('AM.view.ui.DecoratorAbstract',{
    extend: 'Ext.window.Window',
    alias: 'widget.decoratorAbstract',

    initComponent: function(){
        this.title = this.aTitle;
        this.resizable = this.cfg[0];
        this.closable = this.cfg[1];
        this.minimizable = this.cfg[2];
        //this.items = this.anItem;
        this.callParent(arguments);
    }
});

和子类:

Ext.define('AM.view.ui.DecoratorForm',{
    extend: 'AM.view.ui.DecoratorAbstract',
    alias: 'widget.decoratorForm',

    initComponent: function(){  
        this.callParent();
        this.buttons = [
            { text:'Guardar', action:'save', iconCls: 'ico-save' },
            { text:'Cancelar', action:'cancel', iconCls: 'ico-cancel' }
        ];
    }
});

这两个类都包含在控制器中:

Ext.define('AM.controller.Ui',{
    extend: 'Ext.app.Controller',

    views: [
        'ui.Toolbar',
        'ui.Statusbar',
        'ui.AlertErr',
        'ui.AlertOk',
        'ui.AlertWar',
        'ui.AlertDelete',
        'ui.AlertUndelete',
        'ui.DecoratorAbstract',
        'ui.DecoratorForm',
        'ui.DecoratorGrid'
    ],
    model: [],
    store: [],
});

从 Firebug js 控制台我创建子类:

Ext.create('AM.view.ui.DecoratorForm',{cfg:[true,true,true],aTitle: 'Title'}).show();

显示窗口,但不显示按钮。有任何想法吗 ?。

4

2 回答 2

1

这里有几件事...首先,移动this.callParent()initComponent. 这是因为initComponent继承越往上使用,您在设置按钮之前this.buttons调用就错过了这一点。callParent

接下来,你真的不应该使用cfg你传入的这个东西。只需传入你想要使用的配置参数,它们就会可用:

Ext.define('AM.view.ui.DecoratorAbstract',{
    extend: 'Ext.window.Window',
    alias: 'widget.decoratorAbstract',

    initComponent: function(){
        this.callParent(arguments);
    }
});

Ext.define('AM.view.ui.DecoratorForm',{
    extend: 'AM.view.ui.DecoratorAbstract',
    alias: 'widget.decoratorForm',

    initComponent: function(){
        this.buttons = [
            { text:'Guardar', action:'save', iconCls: 'ico-save' },
            { text:'Cancelar', action:'cancel', iconCls: 'ico-cancel' }
        ];
        this.callParent();
    }
});

//to instantiate:
Ext.create('AM.view.ui.DecoratorForm',{
    resizable: true,
    closable: true,
    minimizable: true,
    title: 'Title'
}).show();

每当您试图通过使用类似该cfg数组的东西来“欺骗”组件时,您可能应该重新考虑您在做什么,看看是否有更聪明的方法。

您应该考虑使用的另一件事是Ext.apply(). 通过将之前的内容更改为以下内容,它将节省大量字节:

Ext.apply(this, {
    title: 'my title',
    resizable: cfg[0],
    closable: cfg[1],
    ///...etc...
})
于 2013-08-20T19:42:36.283 回答
0

如果搬家怎么办

this.callParent(arguments);

到您的 DecoratorForm 中的 initComponent 末尾。

于 2013-08-20T15:01:38.447 回答