Как я могу изменить / переопределить порядок Ext.Array.merge внутри initComponent в дочернем классе?
Это дает ошибку, когда я override порядок внутри дочернего класса, и когда я просто extend базовую панель, он все еще использует тот же порядок merge в базовом классе.
Некоторые фрагменты:
Ext.define('MyApp.BasePanel', {
extend: 'Ext.panel.Panel',
initComponent: function () {
var me = this;
me.items = Ext.Array.merge(me.firstFunc(), me.secondFunc(), me.thirdFunc());
me.callParent(arguments)
},
firstFunc: function () {
return [];
},
secondFunc: function () {
return [];
},
thirdFunc: function () {
return [];
},
В этом случае мне нужно вызвать как;
me.items = Ext.Array.merge(me.secondFunc(), me.firstFunc(), me.thirdFunc());
Я пытался переопределить базовый класс, но он дает Synch. Ошибка загрузки;
Ext.define('MyApp.SubPanel', {
override: 'MyApp.BasePanel',
initComponent: function () {
var me = this;
me.items = Ext.Array.merge(me.secondFunc(), me.firstFunc());
me.callParent(arguments)
},
secondFunc: function () {
return [];
},
firstFunc: function () {
return [];
},
// Error: [W] [Ext.Loader] Synchronously loading 'MyApp.SubPanel'; consider adding Ext.require('MyApp.SubPanel') above Ext.onReady



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Даже если вы переопределите его, как вы описали, callParent () просто уничтожит все, что делает ваш подкласс. Предоставьте шаблонный метод в качестве ловушки:
Ext.define('MyApp.BasePanel', {
extend: 'Ext.panel.Panel',
initComponent: function() {
this.items = this.setupItems();
this.callParent();
},
setupItems: function() {
return Ext.Array.merge(me.firstFunc(), me.secondFunc(), me.thirdFunc());
},
firstFunc: function() {
return [];
},
secondFunc: function() {
return [];
},
thirdFunc: function() {
return [];
}
});
Ext.define('MyApp.SubPanel', {
extend: 'MyApp.BasePanel',
setupItems: function() {
return Ext.Array.merge(me.secondFunc(), me.firstFunc(), me.thirdFunc());
}
});
такое прекрасное решение и работает совершенно хорошо. Большое спасибо.