我正在抽象掉代码以专注于核心问题。我有一个main.js
文件,需要第二个文件optionsmod.js
。
我希望能够从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;
我添加的代码不起作用,但有没有办法做类似的事情?
答案 0 :(得分:1)
在模块之间没有默认的传递消息的方法。当 main.js 中发生事件时,很容易在 optionsmod.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
,然后从 main.js 调用foo.on
,但这可能会破坏编写单独模块的整个目的,在这种情况下,我链接的文档会有所帮助。坦率地说,您可以使用这些文档来创建自己的专有邮件系统,但我认为您最好不要考虑上述条款。