Сигнал R, функция javascript клиента не вызывается

#javascript #knockout.js #signalr

#javascript #knockout.js #signalr

Вопрос:

Я создаю демонстрационное приложение для чата, поскольку пытаюсь изучить сигнал r. Моя проблема в том, что моя клиентская функция javascript не вызывается при попытке из метода connect в классе chathub на сервере.

Функция javascript клиента LoadChatRoomContent выполняется только при запуске страницы. и не тогда, когда я вызываю его из функции концентратора сервера.

Есть идеи?

На стороне клиента

 <script type="text/javascript">

   **View Model**

var chatViewModel   = {
chat: $.connection.chatHub, 
connectToLobby: function () {
                this.chat.server.connect(this.userName());
    },
)


 $(function () {
   var chat = $.connection.chatHub;
   ko.applyBindings(chatViewModel);  

     // client side signalr functions

  chat.client.newUserHasJoined = function (userName) {
                //$('#chatContent').append(userName   "has joined");
                chatViewModel.latestChatContent.append(userName   "has joined");

                // update the users online list when a new member has joined
                chatViewModel.onlineUserList.push(userName);


            }; 

 chat.client.loadChatRoomContent = new function (messageHistory, userList) {

                // convert json string to javascript array so that it can be iterated.
                chatViewModel.onlineUserList = $.parseJSON(userList);

                //
                chatViewModel.latestChatContent = $.parseJSON(messageHistory);

                alert("it works");
            };    

           $.connection.hub.start();

        });

**Chat Hub**
 public class ChatHub : Hub
{
    List<connectedUsers> _currentUsers;

    // stores up to 100 messages
    List<string> _messageCache;

    public ChatHub(){
        _currentUsers = new List<connectedUsers>();
        _messageCache = new List<string>();
    }

    public void Connect(string userName)
    {
        // add new user to the list
        lock (_currentUsers)
        {
            _currentUsers.Add(new connectedUsers() { Id = Guid.NewGuid(), userName = userName });
        }
        //let other users know of the new member
        Clients.AllExcept(Context.ConnectionId).newUserHasJoined(userName);

        // send chat messages and current UsersList to caller only
        // both objects sent as json string format.
        Clients.Caller.loadChatRoomContent( new JavaScriptSerializer().Serialize(_messageCache),new JavaScriptSerializer().Serialize(_currentUsers));
    }
 

}

Комментарии:

1. Я буду рад вам помочь, если вы разделите свой код на блоки, объяснив, что представляет собой каждый блок. Улучшенный вопрос имеет улучшенный ответ.

2. loadChatRoomContent находится в Connect методе, который вызывается только один раз для каждого пользователя после подключения. Я не знаю, как вы ожидаете, что новый контент будет транслироваться всем клиентам, которые считают, что он вложен в функцию Connect?