所以我在1个集线器中有2个方法:
public class ChatHub : Hub
{
public void SendMessage(string name, string message)
{
Clients.All.AddMessage(name, message);
}
public void SendAnnounce(string name)
{
Clients.Others.AddMessage(name);
}
}
如何在客户端javascript的1个集线器中正确使用2种方法?
我在javascript中有这个,
for SendMessage(字符串名称,字符串消息)hub方法:
var message = $("#txtMessage").val();
var userid = $("#lblUsername").html();
chat.client.addMessage = function (frm, msg) {
$messages.append("[" + frm + "] " + msg);
}
调用:
chat.server.sendMessage(userid, input);
for SendAnnounce(字符串名称)hub方法:
chat.client.addMessage = function (frm) {
$announcement.append("<div>test</div>");
}
调用:
var userid = $("#txtUsername").val();
chat.server.announcement(userid);
但它不起作用(服务器只使用我的案例公告中的最后一个方法) 它只有在我创建2个集线器并将每个方法放在不同的集线器中时才有效,然后为每个集线器创建不同的变量,如下所示:
//Create Hub on Air
var chat = $.connection.chatHub;
var chat2 = $.connection.announcementHub;
然后使用带有“chat”变量的1方法和带有“chat2”变量的第二种方法。然后它可以工作。像这样:
chat.client.addMessage = function (frm, msg) {
$messages.append("[" + frm + "] " + msg);
}
chat2.client.addMessage = function (frm) {
$announcement.append("<div> test</div>");
});
}
我不明白什么?
答案 0 :(得分:2)
在JavaScript中,你实际上没有方法重载。你正在做的是首先声明addMessage
是一个带有两个参数的函数,然后使用带有一个参数的函数覆盖它。所以最后一个正在使用
使用命名方式不同的方法,例如: addMessage
和addAnnouncement
或使用单个方法并检查是否定义了第二个参数。如果不是那么这是一个公告。
答案 1 :(得分:0)
我实际上得到了这个工作!在一个实例中调用两个方法。我不明白为什么你要创建两个实时连接?你只需要一个。