расширить логику существующего класса Ext.JS в BPM ?
Интересуют подходы которые можно применить в BPM для расширения логики существующих классов.
В Ext.JS 4 существовало, ИМХО, несколько подходов к реализации такого кейса:
1) override метод.
пробовал в "onEntityInitialize" произвольной карточки произвести override метода какого ни будь базового элемента - код выполняется без ошибок, но к желаемому результату не приводит, методы не перекрываются.
"или у меня лыжи не едут" :) если так, то хотелось бы пример использования.
В исходных кодах не нашел ни одного упоминания override, что как-бы намекает... :)
2) Есть перехватчики Ext.Function.createInterceptor и Ext.Function.createInterceptor, но это прямое "трогание" компонентов и применение таких хуков никогда не приветствовалось и считалось крайней мерой.
Как же следует поступать в BPM в соответствии с его парадигмой, когда требуется расширить методы/свойства существующего класса ?
Нравится
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; } }) });