我仍然掌握SignalR的基础知识。我想在我的网站的不同部分使用它,所以我想我可以在主布局中启动连接,并在子视图中添加客户端方法。
根据this answer我有:
window.hub = $.connection.hub.start();
在我的Layout.cshtml和
中window.hub.done(function () {
$.connection.notificationHub.server.joinScannerGroup(1);
alert("in sub view");
});
在我的子视图中,有效。集线器已连接,并调用方法JoinScannerGroup()
。但是,如果我尝试添加:
$.connection.notificationHub.client.scanReceived = function (text) {
alert("scan received");
};
在子视图的javascript中的任何地方,它永远不会被调用。也许我认为它错了,但我想在主页上连接,然后允许任何子页面接收客户端电话。
另外,如果我将$.connection.start()
移动到子视图中,它确实可以正常工作。我理解错了吗?
答案 0 :(得分:5)
您需要在调用hub.start()
之前添加所有客户端集线器方法,或者在调用hub.start()
之前需要添加至少一个集线器方法(因此SignalR将订阅集线器)然后添加所有其他集线器方法如下:
$.connection.notificationHub.on('scanReceived ', function (text) {
alert("scan received");
});
(另见documentation)