Компоненты расширения ExtJS6

Если я объявлю пользовательский компонент, как правильно применить изменения к свойствам при создании расширения компонента? Например:

Ext.define('GridForm',{
    extend: 'Ext.window.Window',
    initComponent: function(){  
        Ext.apply(this,{
            title: 'This a test window!'
            ,height: 400
            ,width: 400       
        });
        this.callParent();
    }    
});
Ext.define('LedDataForm',{
    extend: 'GridForm',
    initComponent: function(){
        Ext.apply(this,{
            title: 'OK, I want to change it to this.'
        });        
        this.callParent();
    }
});
Ext.application({
    name : 'MyApp',
    launch : function() {
        Ext.create('LedDataForm').show();
    }
});

В этом примере я просто хочу изменить заголовок окна при создании «LedDataForm». Все комментарии приветствуются.


person Elcid_91    schedule 26.06.2016    source источник


Ответы (2)


Не пишите конфиги, которые вы хотите переопределить в функции инициализации, вместо этого дайте это как конфиг по умолчанию.

Ext.define('GridForm',{
    extend: 'Ext.window.Window',
    title: 'This a test window!',// Give this as configs rather than in init function
    initComponent: function(){  
        Ext.apply(this,{
            width:400,
            height:400
        });
        this.callParent();
    }    
});
Ext.define('LedDataForm',{
    extend: 'GridForm',
    title: 'OK, I want to change it to this.',
    initComponent: function(){
        Ext.apply(this,{
        });        
    this.callParent();
    }
});
Ext.application({
    name : 'MyApp',
    launch : function() {
        Ext.create('LedDataForm',{
            title:'testing'
        }).show();
    }
});
person Praveen NC    schedule 15.07.2016

Почему бы не сделать это:

Ext.define('GridForm',{
    extend: 'Ext.window.Window',
    title: 'This a test window!',
    height: 400,
    width: 400         
});
Ext.define('LedDataForm',{
    extend: 'GridForm',
    title: 'OK, I want to change it to this.'
});
Ext.application({
    name : 'MyApp',
    launch : function() {
        Ext.create('LedDataForm').show();
    }
});

К телу класса можно применить простую статическую конфигурацию (второй аргумент передается Ext.define).

initComponent обычно требуется только в том случае, если вам нужно вычислить значения или выполнить логику инициализации.

Кроме того, вы можете посмотреть здесь, так как это многое объясняет: Система классов.

person Robert Klein Kromhof    schedule 25.08.2016