#javascript #inheritance #extjs #constructor #subclass
Вопрос:
В ExtJS 6.2 подклассы наследуют родительскую конфигурацию?
Похоже, у меня это не работает.
Ext.define('test1', {
config: {
test1: {
test1: ''
}
},
constructor(config) {
Ext.apply(this, config);
console.log(config);
},
});
Ext.define('test2', {
extend: 'test1',
config: {
test2: ''
},
constructor(config) {
this.callParent(config);
console.log(this.config);
},
});
Ext.create('test2', {
test1: {
test1: 'test1'
},
test2: 'test2'
});
Также похоже, что на родительском конструкторе config
есть undefined
!
Я хочу, чтобы все было определено в конфигурации родительского класса, также доступной в дочернем классе. И иметь возможность настраивать родительскую конфигурацию при создании дочернего класса.
Скрипка: https://fiddle.sencha.com/#view/editoramp;fiddle/3fud
Ответ №1:
Вам нужно initConfig, чтобы получить типичные конфигурации ExtJS. Вы получаете все конфигурации внутри test2.
Ext.define('test1', {
config: {
test1: null
},
constructor(config) {
this.initConfig(config);
return this;
}
});
Ext.define('test2', {
extend: 'test1',
config: {
test2: ''
},
constructor(config) {
// == > config
this.callParent([config]);
// ==> her you can even use getTest1(), setTest1() (or test2)
}
});
Ext.create('test2', {
test1: {
test1: 'test1'
},
test2: 'test2'
});
Комментарии:
1. Но как мне сохранить конфигурацию, заданную родителем по умолчанию? Что делать, если я не передам
test1
конфигурацию при созданииtest2
?2. Я хочу , чтобы все
test1
, что нужно, былоtest2
включено, включая конфигурацию.3. Дайте мне знать, если эта скрипка ответит на ваш вопрос
4. Обновленный код внутри ответа
5. Да, это так. Теперь я помню, что раньше у меня были проблемы, потому что параметр конфигурации должен быть массивом, поэтому он был
NULL
вtest1
конструкторе.
Ответ №2:
Один из обходных путей-позвонить Ext.apply(this, config);
, не будучи уверенным, что это правильное решение.
Ext.define('test2', {
extend: 'test1',
config: {
test2: ''
},
constructor(config) {
this.callParent(config);
Ext.apply(this, config); // <-
console.log(this.config);
console.log(this.getTest1());
console.log(this.getTest2());
},
});