расширить логику существующего класса Ext.JS в BPM ?

Интересуют подходы которые можно применить в BPM для расширения логики существующих классов.
В Ext.JS 4 существовало, ИМХО, несколько подходов к реализации такого кейса:

1) override метод.
пробовал в "onEntityInitialize" произвольной карточки произвести override метода какого ни будь базового элемента - код выполняется без ошибок, но к желаемому результату не приводит, методы не перекрываются.
"или у меня лыжи не едут" :) если так, то хотелось бы пример использования.
В исходных кодах не нашел ни одного упоминания override, что как-бы намекает... :)

2) Есть перехватчики Ext.Function.createInterceptor и Ext.Function.createInterceptor, но это прямое "трогание" компонентов и применение таких хуков никогда не приветствовалось и считалось крайней мерой.

Как же следует поступать в BPM в соответствии с его парадигмой, когда требуется расширить методы/свойства существующего класса ?

Нравится

3 комментария
Лучший ответ

Ext.override можно использовать, но почему-то не рекомендуется и не встречается у Terrasoft.
Я через override полностью копировал весь модуль со всеми методами и изменял какие были необходимы

define("ITScheduleItem", [],
    function() {
 
        Ext.define("Terrasoft.controls.ITScheduleItem", {
            alternateClassName: "Terrasoft.ITScheduleItem",
            override: "Terrasoft.ScheduleItem",
 
            getTimePosition: function(date, isExact) {
                var timeItemHeight = this.timeItemHeight;
                var minutes = Terrasoft.getMinutesFromMidnight(date);
                return this.getTimeItemNumber(minutes, isExact) * timeItemHeight;
            }
        })
    });

Добрый день!
Для расширения логики ext.js необходимо:
1. Создать новый модуль, в котором зарегистрировать новый модуль, расширяющий базовый

define("UsrModule", [],
    function() {
        Ext.define("Terrasoft.configuration.UsrModule", {
            extend: "Terrasoft.SomeBaseModule",
            alternateClassName: "Terrasoft.UsrModule",
 
            init: function () {
                this.callParent(arguments);
                // какая-то логика
            }
 
        })
 
    });               

2. Найти и переопределить схему, в котором используется данный модуль и заменить на новое название и указав его в dependence,
т.е. если в методы было

this.viewModelClassName = "Terrasoft.SomeBaseModule";

необходимо в замещающем методе исправить на

this.viewModelClassName = "Terrasoft.UsrModule";

"Чубко Илья" написал:2. Найти и переопределить схему, в котором используется данный модуль и заменить на новое название и указав его в dependence,
т.е. если в методы было

Так вот в этом и вся проблема... некоторые классы используются в множестве схем, и что теперь их все переопределять ?
viewModelClassName зачастую (для множественных элементов) определяется в каком ни будь методе-генераторе а не в diff схемы.

Должен же быть способ расширять логику уже объявленных классов не наследуясь и не заменяя логику использования по имени, для этого и придуманы, плагины, хуки, override

Переформулирую свой вопрос, как можно использовать Ext.override в парадигме платформы?

Ext.override можно использовать, но почему-то не рекомендуется и не встречается у Terrasoft.
Я через override полностью копировал весь модуль со всеми методами и изменял какие были необходимы

define("ITScheduleItem", [],
    function() {
 
        Ext.define("Terrasoft.controls.ITScheduleItem", {
            alternateClassName: "Terrasoft.ITScheduleItem",
            override: "Terrasoft.ScheduleItem",
 
            getTimePosition: function(date, isExact) {
                var timeItemHeight = this.timeItemHeight;
                var minutes = Terrasoft.getMinutesFromMidnight(date);
                return this.getTimeItemNumber(minutes, isExact) * timeItemHeight;
            }
        })
    });
Показать все комментарии