所以我正在集成SignalR和HotTowel,尽管我真的认为这是一个如何与Durandal集成的问题。
问题是我显然有多种观点。其中一些视图我想响应SignalR消息。问题是,考虑到在调用SignalR的hub start方法之前必须启动SignalR事件,如何进行这种集成。
以view1和view2为例。我希望每个人在接收到SignalR消息并在该视图的上下文中做一些事情(比如以某种方式更新DOM )。这显然是一个SPA,因此为每个视图调用SignalR启动方法似乎是个坏主意,因此在引导时启动SignalR听起来是正确的计划,但此时我的视图可能还没有加载,而且如何确保我的事件具有正确的页面上下文。
这是基于我的理解,即SignalR的所有事件都必须在我调用start之前注册。StackOverflow的聪明人有什么想法吗?
编辑关于问题的扩展
该网站的一部分内容包括上传文件以进行解析和处理,以便导入数据库。我已经创建了一个视图,在该视图中选择文件并(使用FineUploader)上传到WebApiController。控制器执行检查上传的文件的基本步骤,然后启动一个异步任务来实际执行解析和处理,同时立即返回基本的"Yep上载精细“消息。
这将导致“进行中”文件的列表刷新,该文件以“上载”状态出现。当异步任务发生时,对文件进行解析,然后根据规则系统进行处理,然后最后导入到另一个后端数据存储中。在发生这些状态更改时,SignalR向客户端发送消息,通知它们这些更改,从而根据文件名更新状态。为了实现这一点,我必须在SignalR中接收到的事件上附加一个函数。这甚至需要对我的视图(实际上是视图模型)进行某种引用,这样它就可以更新正确的值。
由于SignalR应该通过调用hub.Start()来启动一次,所以我在“引导”阶段尝试这样做。但是,当我的SPA启动时,该视图尚未加载,因此也没有该视图模型,因此负责初始化SignalR的函数无法理解它必须更新的视图/视图模型。
我在使用SignalR时看到的例子显示它在一个视图中使用,但是如果您需要多个视图(您不能一直调用hub.start(),可以吗?)
对不起,如果这还不合理的话,我会发布一些代码什么的。
发布于 2013-06-13 02:57:23
如果您使用
$.connection.myHub.on("myMethod", function (/* ... */) { /* ... */ });而不是
$.connection.myHub.client.myMethod = function (/* ... */) { /* ... */ };您可以在调用$.connection.hub.start()之后添加客户端集线器方法;
https://stackoverflow.com/questions/17013971
复制相似问题