2014-04-17 3 views
0

Я отвлекаю код, чтобы сосредоточиться на основном вопросе. У меня есть файл main.js, для которого требуется второй файл, optionsmod.js.Передача сообщения между 2 сценариями аддона

Я хочу, чтобы иметь возможность отправлять сообщения от optionsmod.js до main.js, так что main.js может тогда продолжать делать другие вещи. Я не знаю, как это сделать ...

Вот пример, который не работает.

main.js:

var optionsmod = require("optionsmod.js"); 
var self = require("sdk/self"); 

optionsmod.init(); 

self.port.on("message",function(){ 
     console.log("message received"); 
}); 

optionsmod.js:

var self = require("sdk/self"); 
function init(){ 
     console.log("here in init"); 
     //FOR THIS EXAMPLE, I'VE MADE THE CALL HERE. BUT WONT BE NORMALLY 
     sendMessage(); 
} 

function sendMessage(){ 
     self.port.emit("message"); 
     console.log("message sent"); 
} 

exports.init = init; 

код я добавил не работает, но есть способ сделать что-то подобное?

ответ

1

Не существует способа передачи сообщений между модулями по умолчанию. Очень легко получить что-то в optionsmod.js, когда событие происходит в main.js. Просто экспортируйте функцию и позвоните ей с main.js. Тем не менее, это не так просто. Два способа справиться с этим - передать функции обратного вызова и creating event targets. Вот пример с функцией обратного вызова:

main.js

var optionsmod = require("optionsmod.js"); 
var eventCallback = function(message) { 
    console.log('message received: '+message); 
}; 
optionsmod.init(eventCallback); 

optionsmod.js

exports.init = function(eventCallback) { 
    foo.on('bar', function() { 
    eventCallback('the message'); 
    console.log('message sent'); 
    }); 
}; 

В качестве альтернативы можно экспортировать foo, а затем вызвать foo.on из главного. js, но это, вероятно, побеждает целую цель написания отдельного модуля, и в этом случае документы, с которыми я связан, будут полезны. Честно говоря, вы, вероятно, могли бы использовать эти документы для создания собственной собственной системы обмена сообщениями, но я думаю, вам лучше подумать в вышеуказанных терминах.

+0

Спасибо. Я займусь этим завтра. Я не хотел сначала обращаться за обратным вызовом (я забыл, почему), но похоже, что это может быть путь. – Simon

Смежные вопросы