HotTowel(杜兰达真的)和SignalR初始化

Ada*_*dam 8 signalr durandal hottowel

所以我正在整合SignalR和HotTowel,虽然我认为这是如何与Durandal本身集成的问题.

问题是我有很多观点.其中一些视图我想响应SignalR消息.考虑到在调用SignalR的集线器启动方法之前必须启动SignalR事件,问题是如何进行此集成.

举个例子,我有view1和view2.我希望每个人在接收到SignalR消息时和在该视图的上下文中做某事(所以让我们说以某种方式更新DOM).这显然是SPA,因此为每个视图调用SignalR启动方法似乎是一个坏主意,因此在启动时启动SignalR听起来像正确的计划,但在那时我的视图可能没有被加载,我仍然如何确保我的活动有适合页面的上下文.

这是基于我的理解,即在调用start之前必须注册SignalR的所有事件.任何想法聪明的StackOverflow人?

编辑以扩展问题

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

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

由于SignalR应该通过调用hub.Start()启动一次,我试图在"启动"阶段执行此操作.但是,当我的SPA启动时,该视图尚未加载,因此也没有该视图模型,因此我负责初始化SignalR的函数无法理解它必须更新的视图/视图模型.

我在使用SignalR时看到的示例显示它在一个视图中使用,但如果您在多个视图中需要它,那确实无法正常工作(您不能只是继续调用hub.start()吗?)

对不起,如果这仍然没有意义,我会发布一些代码或其他东西.

hal*_*r73 9

如果你使用

$.connection.myHub.on("myMethod", function (/* ... */) { /* ... */ });
Run Code Online (Sandbox Code Playgroud)

代替

$.connection.myHub.client.myMethod = function (/* ... */) { /* ... */ };
Run Code Online (Sandbox Code Playgroud)

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