【发布时间】:2013-12-18 13:07:06
【问题描述】:
在我的 javascript XMPP 项目中,有一个核心部分和一个插件部分。核心部分必须独立于插件部分。我试图从插件部分调用一个核心函数,它本身需要调用一个插件函数。由于概念的核心部分不知道任何插件函数,我试图将插件函数作为回调函数移交。就是这样:
有strophe-library 和muc-plugin 包含join-function。
我自己在核心中添加了一个函数joinMuc,这样就可以有回调了,这是原函数没有提供的:
core = {
joinMuc: function(room, onMessage, onPresence, onRoster, result) {
MX.connection.muc.join(
room,
jQuery.jStorage.get('settings').username,
onMessage,
onPresence,
onRoster
);
if (result) result(room);
},
}
我调用core.joinMuc并传递参数和回调函数:
plugin = {
doHtml: function(result) {
//…
},
doPlain: function(result) {
//…
},
joinGame: function(chatroom){
core.joinMuc(
chatroom,
core.onMessage,
core.onPresence,
core.onRoster,
function(result){
//…
}
);
}
}
core.onMessage 将从join-function 获取实际的 xmpp-message 作为参数,但现在这里是棘手的部分:我实际上需要 core.onMessage 的三个参数来交出两个插件功能其中一个应该在core.onMessage 决定它是什么类型的消息之后运行:
core = {
onMessage: function (message, handleHTMLMessage, handlePlainMessage){
var rawMessageBody = $(message).find('body').text();
var parsedMessageHtml = $.parseHTML(rawMessageBody)[0];
if ( parsedMessageHtml.nodeName.toLowerCase() == 'foo' ) {
handleHTMLMessage(parsedMessageHtml);
} else {
handlePlainMessage(rawMessageBody);
}
return true;
},
}
所以现在我的问题是:如何使用两个额外的参数调用core.onMessage?我试图调用core.onMessage(plugin.doHtml,plugin.doPlain) 作为core.joinMuc 的参数,但最终导致浏览器崩溃的无限循环。
【问题讨论】:
标签: javascript parameters callback parameter-passing strophe