не может переопределить поведение mixin после его использования в определении класса - PullRequest
0 голосов
/ 26 апреля 2020

Мне нужно переопределить некоторые функции-члены, добавленные mixin из сторонней библиотеки. Проблема в том, что миксин используется сразу в нескольких определениях сторонних классов в том же файле сценария, где определен миксин. И я могу только вставить собственный код до или после этого скрипта, но не между ними. Если после этого я вызову override, то уже определенные классы не получат мою функцию в цепочке вызовов.

// library script BEGIN
Ext.define('Foo.bar.Base', {
});


Ext.define('Foo.bar.Util', {
  newmember: function() {
    console.log('newmember');
  }
});


Ext.define('Foo.bar.Derived', {
   extend: 'Foo.bar.Base',

   mixins: {
       fooutil: 'Foo.bar.Util'
   }
});

// library script END

Foo.bar.Util.override({
   newmember: function () {
       console.log('newmember2');
       this.callParent();
   }
});


var obj = new Foo.bar.Derived();

obj.newmember();

Фактический вывод:

newmember

Требуемый вывод:

newmember2
newmember

1 Ответ

1 голос
/ 26 апреля 2020

Переопределить перед определением класса, используя миксин. Это можно сделать, используя override в качестве свойства при определении:


Ext.define('Foo.bar.UtilOverride',{
   override: 'Foo.bar.Util',
   newmember: function () {
       console.log('newmember2');
       this.callParent();
   }
});

// library script BEGIN
Ext.define('Foo.bar.Base', {
});


Ext.define('Foo.bar.Util', {
  newmember: function() {
    console.log('newmember');
  }
});


Ext.define('Foo.bar.Derived', {
   extend: 'Foo.bar.Base',

   mixins: {
       fooutil: 'Foo.bar.Util'
   }
});

// library script END



var obj = new Foo.bar.Derived();

obj.newmember();
...