2016-07-28 3 views
0

поэтому у меня есть следующий код на моей странице макета:соединение Signalr на макете и вид

$(document).ready(function() { 
    var connection = $.connection.notificationHub; 
    connection.client.onTicketUpdated = function (model, user, notificationId) { 
     .... 
    } 

    $.connection.hub.start().done(function() { 
     console.log("Successfully connected to CoreHub."); 
    }); 

которых действие должно произойти на любой странице. Таким образом, уведомление может отображаться в главном баре. Однако у меня есть другая страница, которая позволяет сканировать Index.cshtml, загружаемый через основной макет.

$(document).ready(function() { 
    var connection = $.connection.notificationHub; 
    connection.client.onNewTicket = function (model, user, notificationId){ 
     .... 
    }; 
}); 

Есть ли способ не называть начало снова? Разве это не создало бы 1 соединение для onTicketUpdated и еще одного целого для onNewTicket? Могу ли я использовать hub.start() из layout.cshtml внутри index.cshtml?

Это прослушивало меня какое-то время, и все мои исследования я не нашел ничего, что зафиксировало бы это. Должен быть какой-то способ сделать это, потому что создание двух разных соединений для 2 простых функций кажется большим, чем убийство.

ответ

2

Вы можете попытаться разделить связь между двумя страницами:

Layout.cshtml:

var connection; 
$(document).ready(function() { 
    connection = connection || $.connection.notificationHub; 
    connection.client.onTicketUpdated = function (model, user, notificationId) { 
     .... 
    } 
    $.connection.hub.start().done(function() { 
     console.log("Successfully connected to CoreHub."); 
    }); 
} 

Index.cshtml:

$(document).ready(function() { 
    connection = connection || $.connection.notificationHub; 
    connection.client.onNewTicket = function (model, user, notificationId) { 
     .... 
    } 
    //$.connection.hub.start().done(function() { 
    //  console.log("Successfully connected to CoreHub."); 
    //}); 
} 
+0

Спасибо, это помогло, и, похоже, работать. Вы знаете, есть ли проблема с вызовом onTicketUpdated как по макету, так и по индексу? заменит ли он один из макета или объединит их и будет работать правильно? – Insight

+0

Конечно, они будут сливаться вместе, потому что 'Index.cshtml' является частью' Layout.cshtml' через 'RenderBody()' и 'connection' переменная одинакова для обеих страниц. –

+0

Я говорил о функциях jquery, а не о cshtml-страницах. Извините, если я объясню это странно. Поэтому я мог бы вызвать onTicketUpdated в макете и index.cshtml. – Insight

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