2015-09-01 4 views
0

Когда я работаю с AJAX это довольно просто:Как показать прогресс-бар с помощью SignalR

  1. Начать прогресс-бар (например, представить прогресс-бар кнопка)
  2. сделать вызов AJAX
  3. Когда обработчик успеха называется, обновление пользовательского интерфейса с данными, вы получили от AJAX вызова и остановить прогресс-бар

Когда я работаю с SignalR я делаю следующее. На сервере мой метод hum не возвращает ничего (поэтому я не могу обновить интерфейс и остановить индикатор выполнения). Вместо этого я вызываю вызов методом, подобным ThisDataWasChanged для всех клиентов (включая тот, который отправил данные).

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

+0

Пожалуйста, ваши код, как вы сейчас делаете индикатор выполнения, чтобы мы могли дать лучший ответ. –

+1

Пожалуйста, см. полный ответ: http://stackoverflow.com/a/27526294/2181514 –

ответ

1

Что вам нужно сделать, это что-то вроде следующего в классе Hub

Hub

public class ProgressBarHub : Hub 
{ 
    public void change() 
    { 
     // Do some stuff 
     Clients.Client(Context.ConnectionId).thisDataWasChanged(progressBarObj); 
    } 
} 

JS

// Create hub 
var hub = $.connection.progressBarHub; 

// Connect 
$.connection.hub.start().done(function() { 
    // Start progress bar? 
    // Create a start progress bar method in the hub and call it 
    }); 


hub.client.thisDataWasChanged = function (progressBarObj) { 
    //Do something to the progress bar with the progressBarObj that we returned 
}; 
+0

К сожалению, после этой реализации все progressbars для всех клиентов будут закрыты после thisDataWasChanged. Должен быть способ узнать, что thisDataWasChanged вызван конкретным вызовом клиента. – SiberianGuy

+0

Что значит быть закрытым? Вы можете просто отправить обновление вызывающему клиенту, используя вместо этого вместо этого команду «Клиенты.Client (Context.ConnectionId) .thisDataWasChanged». –

+0

Я закончил тем, что передал Context.ConnectionId в thisDataWasChanged и на клиенте, я проверяю, является ли это моим уведомлением и останавливается индикатор выполнения. – SiberianGuy

Смежные вопросы