Страницы: 1
видимо, предполагается использовать так:
Выделить кодКод:
require('sdk/tabs').on('open', путьКМетодуВОбъектеОбкртке.handlerOpen.bind(путьКМетодуВОбъектеОбкртке));
Не понял строку кода. путьКМетодуВОбъектеОбкртке.handlerOpen.bind(путьКМетодуВОбъектеОбкртке)
Mozilla добавляет к любой функции JS метод bind чтобы можно было указать контекст, в котором эта функция выполняется?
// Что-то типа: myAddon = { handlerTabsOpen : function() { }, run : function() { require('sdk/tabs').on('open', this.handlerTabsOpen.bind(this)); } } myAddon.run();
PS:
Нагуглил. Этот метод является встроенным в современном JS.
javascript.ru : https://learn.javascript.ru/bind#bind
MDN : https://developer.mozilla.org/en-US/doc … ction/bind
Infocatcher, спасибо огромное.
Самое обидное, что проходил курс javascript.ru три года назад, но многое вылетело из головы :(
1. Привязываем функцию к коллекции табов.
2. В функции handlerOpen привязываем события к новому tab-у.
handlerOpen : function(tab) { // Тут мы потеряли ОбъектОбертку tab.on('pageshow', this.tab.pageshow); tab.on('activate', this.tab.activate); }
Я могу завернуть код в анонимную функцию, но это некрасивое решение
handlerOpen : function(tab) { // Тут мы потеряли ОбъектОбертку (function(){ // Тут мы переустановили this tab.on('pageshow', this.tab.pageshow); tab.on('activate', this.tab.activate); }).call(zimMain.tabs.handlers); }
См. строку: // this === require('sdk/tabs'), а ожидается "zimMain.tabs.handlers"
в методе zimMain.tabs.handlers.open
Тестовый код main.js:
[code]
console.log('main.js', 'BEG');
var zimMain = {
/**
* Контейнер для инклуда элементов SDK
*/
sdk : {
tabs : require('sdk/tabs'),
contextMenu : require
Страницы: 1