2014-04-17 54 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

模塊之間沒有默認的消息傳遞方式。在main.js中發生事件時,在選項mod.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