Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   Как вызвать свою функцию из «чужого» кода в Java Script, не переписывая «чужой» код? (https://javascript.ru/forum/library-toolkit-framework/48852-kak-vyzvat-svoyu-funkciyu-iz-chuzhogo-koda-v-java-script-ne-perepisyvaya-chuzhojj-kod.html)

korobochkin 19.07.2014 13:31

Как вызвать свою функцию из «чужого» кода в Java Script, не переписывая «чужой» код?
 
Делаю небольшой плагин чата под Вордпресс, используя в качестве основы Java Script библиотеку Candy (работает с XMPP). В Candy есть функция SetNickname, которая изменяет ник, но она ничего не возвращает — а значит нельзя узнать был изменен ник или нет (ник не изменится, если занят кем-то другим и т. п.). После вызова SetNickname сервер присылает Presense, сообщение, которое обрабатывается в Candy.Core.Event.Jabber.Room.Presence — оттуда как раз можно узнать был изменен ник или нет.

Как запустить свою функцию из Candy.Core.Event.Jabber.Room.Presence, которая будет уже что-то сохранять в базу данных?

В файле core.js был найден следующий код, который, как я понимаю, позволяет "цепляться" за события, которые происходят в Candy.

/** Function: registerEventHandlers
* Adds listening handlers to the connection.
*
* Use with caution from outside of Candy.
*/
self.registerEventHandlers = function() {
self.addHandler(self.Event.Jabber.Version, Strophe.NS.VERSION, 'iq');
self.addHandler(self.Event.Jabber.Presence, null, 'presence');
self.addHandler(self.Event.Jabber.Message, null, 'message');
self.addHandler(self.Event.Jabber.Bookmarks, Strophe.NS.PRIVATE, 'iq');
self.addHandler(self.Event.Jabber.Room.Disco, Strophe.NS.DISCO_INFO, 'iq', 'result');

self.addHandler(_connection.disco._onDiscoInfo.bind(_connection.disco), Strophe.NS.DISCO_INFO, 'iq', 'get');
self.addHandler(_connection.disco._onDiscoItems.bind(_connection.disco), Strophe.NS.DISCO_ITEMS, 'iq', 'get');
self.addHandler(_connection.caps._delegateCapabilities.bind(_connection.caps), Strophe.NS.CAPS);
};

ixth 19.07.2014 14:22

Судя по коду, Candy.Core.Event.Jabber.Room.Presence триггерит 'candy:core.presence.room', попробуй забиндиться на него и посмотреть что приходит.

korobochkin 19.07.2014 15:17

Я только начал знакомство с JS, поэтому буду признателен более подробному объяснению на пальцах. Слово «забиндится» не понятно.


Часовой пояс GMT +3, время: 13:43.