我正在构建一个使用sammy.js,knockout.js和SignalR的单页应用程序。主页面(index.html)根据客户端路由将额外的html页面加载到div中。连接到不同页面上的不同集线器
我有2个SignalR集线器,一个连接到服务器端推数据的初始页面,这工作正常。然而,当用户导航到它时加载的页面之一也应连接到不同的集线器。
在主页中我做了以下内容:
window.hubReady = $.connection.hub.start()
var hub1 = $.connection.hub1;
hub1.updateReceived = function() {
alert('data from server');
}
window.hubReady.done(function() {
hub1.server.start();
});
在第二页,我有:
var hub2 = $.connection.hub2;
hub2.updateReceived = function() {
alert('data from server');
}
window.hubReady.done(function() {
hub2.server.start();
});
不过,我从来没有收到在第二页中的任何更新。
任何想法我错了?
真的吗?这很烦人,我希望将客户端代码分离到视图模型中,以便查看它所关注的视图。此外,这是否意味着服务器将数据发送到客户端,如果Hub2视图未加载,我将丢弃该数据? –
就你而言是的。如果您真的想要阻止额外的数据,另一个选择是您可以重新启动SignalR连接。也就是说,当您导航到需要hub2的内部页面之一时,您可以调用stop,然后添加新的hub2方法,然后调用连接启动。此时,您也可以从hub1删除绑定。 –
只要应用程序正在运行,hub1就会保持活动状态,hub2仅在打开时才由一个视图使用。好的,如果我停止/添加/开始,当应用程序离开该视图时,是否需要删除hub2?集线器连接是否会保持在范围内,并且仍然会收到数据,即使没有视图可以显示它们? –