在hub.start()之后检测signalR集线器何时就绪

时间:2014-01-12 20:51:31

标签: knockout.js signalr signalr.client

我有一个父视图和子视图模型。父视图模型启动signalR连接:

$.connection.hub.start()

子视图模型 - 仅在用户访问聊天时加载的模式 - 执行以下操作:

chat.server.addUserToChat(self.currentUsername()).done(function() {
    alert('added');
});

问题是,子呼叫在父呼叫之前发生。我可以使用1秒的setTimeOut来解决这个问题,但理想情况下我可以这样做:

$.connection.hub.ready(function(){chat.server.addUserToChat(self.currentUsername()).done(function() {
        alert('added');
    });});

signalR中有这样的东西吗?或者我是否需要在viewmodels之间使用timeouts / pub / sub?

2 个答案:

答案 0 :(得分:4)

这似乎是构建应用程序的更多问题。 您可以将hub.start()返回的延迟对象存储在某个全局对象中,并在子视图模型中访问它:

window.chatApp = {
    hubConnector: $.connection.hub.start()
};

// in your child viewmodel
chatApp.hubConnector.done(function () {
    chat.server.addUserToChat(self.currentUsername()).done(function () {
        alert('added');
    });
});

答案 1 :(得分:0)

试试这个

$.connection.hub.start().done(function () {
  // hub is now ready
  chat.server.addUserToChat(self.currentUsername()).done(function() {
    alert('added');
  });
});