Я относительно новичок во всех тонкостях javascript, поэтому, возможно, эта проблема с синхронизацией - просто мое отсутствие понимания того, как программировать допустимый javascript для обработки событий.
У меня есть два концентратора SignalR, которые используются на одной странице. Одним из них является чат-центр, который работает 100% времени. Другой используется с некоторыми объектами Raphael js, и с ним у меня проблемы.
У меня есть событие щелчка по одному из объектов круга Рафаэля, и когда я щелкаю по нему вскоре после загрузки экрана, мой метод C # хаба не вызывается. Когда это происходит, в консоли разработчика Chrome появляется ошибка «SignalR: подключение должно быть установлено до отправки данных. Вызов .start () перед .sent () »Всегда вызывается событие javascript, которое вызывает метод hub cs. Странно то, что, когда я жду несколько секунд, метод cs hub всегда работает так, как ожидалось. Это похоже на загрузку событий концентратора за пару секунд. Кто-нибудь еще сталкивался с таким сценарием?
У меня есть мой js-код в $ (document) .ready (function () {... но я предполагаю, что, поскольку js-объекты Raphael не являются частью dom, пока не будет запущен js-код, будет не заставляйте их загружаться.
$(document).ready(function() {
var clientHub = $.connection.tableHub;
var canvas = Raphael((innerWidth / 2) + 83, (innerHeight / 2) - 194, 74, 74);
var circle1 = seat1Canvas.circle(37, 37, 35);
var circle1Text = seat1Canvas.text(37, 37, "Open");
var buildCircleAndSendToClients = function() {
clientHub.buildCircle(identity.Name);
};
var drawAvailableCircle = function() {
circle1 = seat1Canvas.circle(37, 37, 35);
circle1Text = seat1Canvas.text(37, 37, "Sit\nHere");
circle1.attr("fill", "#fffeee");
circle1.attr("stroke", "black");
circle1.attr("stroke-width", 3);
circle1.mousedown(buildCircleAndSendToClients);
};
circle1.attr("fill", "#eeefff");
circle1.attr("stroke", "black");
circle1.attr("stroke-width", 3);
circle1.mouseover(drawAvailableCircle);
clientHub.drawCircle = function(username) {
circle1 = seat1Canvas.circle(37, 37, 35);
circle1Text = seat1Canvas.text(37, 37, username);
circle1.attr("fill", "#eeefff");
circle1.attr("stroke", "black");
circle1.attr("stroke-width", 3);
};
$.connection.hub.start();
});