Вопрос

Вместо наследованного метода в JS выполняется родительский

Добрый день, коллеги!

Создали первоначальную схему в которой есть метод обработки сообщений от бизнес-процесса. Далее создали замещающую схему на основе первой. В результате методы, кроме обработки сообщения от БП, выполняются замещенные. 

Метод инициализации в схемах:

init: function(){
  this.callParent(arguments);
  Terrasoft.ServerChannel.on(Terrasoft.EventName.ON_MESSAGE, this.bpMessageListener, this);
}

При попытке отписаться и подписаться на сообщения так:

init: function(){
  this.callParent(arguments);
  Terrasoft.ServerChannel.un(Terrasoft.EventName.ON_MESSAGE, this.bpMessageListener, this);
  Terrasoft.ServerChannel.on(Terrasoft.EventName.ON_MESSAGE, this.bpNewMessageListener, this);
}

в консоли браузера валятся ошибки:

all-combined.js:6 Uncaught TypeError: Cannot read property 'apply' of undefined
    at i.fire (all-combined.js:6)
    at i.continueFireEvent (all-combined.js:6)
    at i.fireEventArgs (all-combined.js:6)
    at i.fireEvent (all-combined.js:6)
    at i._translateDecodedMessage (all-combined.js:41)
    at i._channelMsgHandler (all-combined.js:41)
    at i.providerChannelMsgEventHandler (all-combined.js:41)
    at i.fire (all-combined.js:6)
    at i.continueFireEvent (all-combined.js:6)
    at i.fireEventArgs (all-combined.js:6)
fire @ all-combined.js:6
continueFireEvent @ all-combined.js:6
fireEventArgs @ all-combined.js:6
fireEvent @ all-combined.js:6
_translateDecodedMessage @ all-combined.js:41
_channelMsgHandler @ all-combined.js:41
providerChannelMsgEventHandler @ all-combined.js:41
fire @ all-combined.js:6
continueFireEvent @ all-combined.js:6
fireEventArgs @ all-combined.js:6
fireEvent @ all-combined.js:6
channelMsgHandler @ all-combined.js:41
(anonymous) @ all-combined.js:41

Как сделать так, чтобы обработка сообщений от сервера выполнялась замещенным методом?

Спасибо!

 

Нравится

4 комментария

А почему просто не заместить функцию bpMessageListener в замещенном методе? Ну или если не нужен его функционал, то просто в его замещении не вернуть пустой return ?

Метод заместили, но он не выполняется, проверили в режиме отладки, точка останова прерывается на родительском методе.

Добрый день.

Подписка на события в методе init - это в принципе некорректно. Лучше вынести подписку в отдельную функцию и уже её вызывать в init. В этом случае вы сможете просто заместить функцию подписки в дочерней схеме.

Спасибо, попробуем проверить.

Показать все комментарии