Signalr 热毛巾(Durandal)和信号器初始化

Signalr 热毛巾(Durandal)和信号器初始化,signalr,durandal,hottowel,Signalr,Durandal,Hottowel,所以我正在整合Signal和Hottown,虽然我真的认为这是一个如何与Durandal整合的问题 问题是我显然有多种观点。我想对这些观点中的一些作出回应。问题是,考虑到在调用信号器的集线器启动方法之前必须启动信号器事件,如何进行集成 以view1和view2为例。我希望每个人在收到信号器消息时,在该视图的上下文中做一些事情(比如说,以某种方式更新DOM)。这显然是一个SPA,因此为每个视图调用signer start方法似乎是个坏主意,因此在引导时启动signer一次听起来像是正确的计划,但在

所以我正在整合Signal和Hottown,虽然我真的认为这是一个如何与Durandal整合的问题

问题是我显然有多种观点。我想对这些观点中的一些作出回应。问题是,考虑到在调用信号器的集线器启动方法之前必须启动信号器事件,如何进行集成

以view1和view2为例。我希望每个人在收到信号器消息时,在该视图的上下文中做一些事情(比如说,以某种方式更新DOM)。这显然是一个SPA,因此为每个视图调用signer start方法似乎是个坏主意,因此在引导时启动signer一次听起来像是正确的计划,但在这一点上,我的视图可能尚未加载,而且我如何确保我的事件具有页面的正确上下文

这是基于我的理解,即在我调用start之前,必须注册信号器的所有事件。聪明的人有什么想法吗

编辑以展开问题

网站的一部分涉及上传文件进行解析和处理,以导入数据库。我已经创建了一个视图,其中文件被选中并上传(使用FineUploader)到WebApicController。控制器执行检查上传文件的基本步骤,然后启动异步任务以实际执行解析和处理,同时立即返回基本的“Yep that upload fine”消息

这会导致“正在进行”文件列表刷新,并且文件显示为“已上载”状态。当异步任务发生时,解析文件,然后根据规则系统进行处理,最后导入另一个后端数据存储。当这些状态发生变化时,signer向客户机发送消息,通知他们这些变化,从而根据文件名更新状态。为了实现这一点,我必须在事件在信号器中接收时为其附加一个函数。这甚至需要对我的视图(实际上是viewmodel)进行某种引用,以便它可以更新正确的值

由于signar应该通过调用hub.Start()启动一次,所以我尝试在“引导”阶段执行此操作。但是,当SPA启动时,该视图尚未加载,因此viewmodel也未加载,因此负责初始化Signal R的功能可能不了解它必须更新的视图/viewmodel

我所看到的使用SignalR的示例显示它在一个视图中使用,但如果您在多个视图中需要它,这肯定不起作用(您不能一直调用hub.start(),可以吗)

抱歉,如果这仍然没有意义,我将发布一些代码或其他东西。

如果您使用

$.connection.myHub.on("myMethod", function (/* ... */) { /* ... */ });
而不是

$.connection.myHub.client.myMethod = function (/* ... */) { /* ... */ };

您可以在调用
$.connection.hub.start()
后添加客户端集线器方法

你能描述一下你试图解决的问题吗?你试过什么?太棒了!这正是我想要的技术。我在谷歌上搜索了“集线器启动后的信号器事件”之类的东西,但出于某种原因,我找不到任何描述这种替代方案的东西!谢谢halter73!不仅仅是Durandal或Hottobble,任何水疗应用都能从中受益。我正在开发一个主干、下划线应用程序,这解决了我在SignalR未接收推送消息时遇到的问题。我要补充的是,在开始连接之前,每个连接中心至少应连接一个回调。回调是否没有操作并不重要。一旦你这样做了,你应该可以随意添加一个remove回调,即使在Signal连接打开时也是如此。@halter73谢谢,在开始连接之前,每个集线器连接一个回调解决了我的特殊问题。您对此有参考资料吗?@tjrobinson请查看以下指南“如何建立连接”部分中的“注意事项”: