Signalr signarjavascript客户端代理多个事件
我检查了文件。我知道如何附加相同的客户机函数而不重写该函数。但当谈到启动函数时,我找不到任何关于它的信息。只是一些javascript技巧。所以我创建了一个非常简单的示例。以下是我所做的和我想做的: 这里有一个非常简单的中心:Signalr signarjavascript客户端代理多个事件,signalr,signalr-hub,signalr.client,Signalr,Signalr Hub,Signalr.client,我检查了文件。我知道如何附加相同的客户机函数而不重写该函数。但当谈到启动函数时,我找不到任何关于它的信息。只是一些javascript技巧。所以我创建了一个非常简单的示例。以下是我所做的和我想做的: 这里有一个非常简单的中心: [HubName("exampleHub")] public class ExampleHub : Hub { public void ExampleMessage() { this.Clients.All.message("This me
[HubName("exampleHub")]
public class ExampleHub : Hub
{
public void ExampleMessage()
{
this.Clients.All.message("This message goes to two different client method!");
}
}
下面是javascript文件:
function ExampleViewModel(exampleHubProxy) {
var self = this;
self.init = function () {
exampleHubProxy.invoke('exampleMessage');
};
};
$(function () {
var connection = $.hubConnection();
var exampleHubProxy = connection.createHubProxy('exampleHub');
var exampleViewModel = new ExampleViewModel(exampleHubProxy);
exampleHubProxy.on('message', function (clientEvent1) {
console.log(clientEvent1);
});
exampleHubProxy.on('message', function (clientEvent2) {
console.log(clientEvent2);
});
$.connection.hub.start().done(exampleViewModel.init);
})
输出是两次“此消息发送到两个不同的客户端方法!”日志一切如我所料。这也是我在生成的代理中想要的,如下所示:
$(function () {
var exampleHubProxy = $.connection.exampleHub;
var exampleViewModel = new ExampleViewModel(exampleHubProxy);
var anotherViewModel = new AnotherViewModel(exampleHubProxy);
//I know this is not valid. I am looking for something like this.
exampleHubProxy.client.message += function (clientEvent1) {
console.log(clientEvent1);
};
exampleHubProxy.client.message += function (clientEvent2) {
console.log(clientEvent2);
};
//Real question starts here
//This is what I can't do in without generated proxies!
$.connection.hub.start+=exampleViewModel.init;
$.connection.hub.start+=anotherViewModel.init;
$.connection.hub.start();
})
所以这个问题的根本原因是我有不同的ViewModelJavaScript文件,我应该在同一个页面中启动它们。这意味着我必须将$.connection.hub.start()函数带到页面底部的某个位置。但是这些javascript文件没有关系,所以当一个工作时,另一个可能不工作。当一个javascript文件启动中心时,另一个可能需要修改客户端对象并再次启动它。看来这不是个好主意。我也检查了,但它没有给我一个好的解决方案。使用start()返回一个承诺的事实,并在实现时添加多个处理程序
承诺是一个jQuery延迟对象:
谢谢你帮了我大忙!现在我可以像我想象的那样创建架构了。我搜索了一个星期,不知道有那么容易。如何链接这些承诺也很好,例如:
startPromise.then(exampleViewModel.init)。then(anotherViewModel.init)代码>
$(function () {
var exampleHubProxy = $.connection.exampleHub;
var exampleViewModel = new ExampleViewModel(exampleHubProxy);
var anotherViewModel = new AnotherViewModel(exampleHubProxy);
exampleHubProxy.on('message', function (clientEvent1) {
console.log(clientEvent1);
});
exampleHubProxy.on('message', function (clientEvent2) {
console.log(clientEvent2);
});
//Real question starts here
var startPromise = $.connection.hub.start();
// start() returns a promise
startPromise.then(exampleViewModel.init);
startPromise.then(anotherViewModel.init);
$.connection.hub.start();
});