私はJavaScriptのすべての複雑さに比較的慣れていないので、おそらくこのタイミングの問題は、イベント処理のために有効なJavaScriptをプログラムする方法を理解していないだけです.
1 つのページで 2 つの SignalR ハブを使用しています。1 つはチャット ハブで、常に 100% 機能します。もう1つはいくつかのRaphael jsオブジェクトで使用されており、私が問題を抱えているものです。
ラファエル サークル オブジェクトの 1 つにクリック イベントがあり、画面がロードされた直後にそれをクリックすると、C# ハブ メソッドが呼び出されません。これが発生すると、Chrome の開発ツールのコンソールに「SignalR: データを送信する前に接続を開始する必要があります。.sent() の前に .start() を呼び出します」 ハブ cs メソッドを呼び出す JavaScript イベントは常に呼び出されます。奇妙なことに、数秒待つと、cs ハブ メソッドが常に期待どおりに動作するように見えます。ハブ イベントを読み込むのに数秒かかるようです。他の誰かがこのタイプのシナリオに遭遇したことがありますか?
$(document).ready(function() {...にjsコードがありますが、jsコードが実行されるまでRaphael jsオブジェクトはdomの一部ではないため、それらを強制しないと思いますロードします。
$(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();
});