0

これはうまくいきます

class Window.AppViewModel
    message : ko.observable("")
    chatMessages : ko.observableArray()
    canSendMessage : ko.observable(false)
    Window.sHub.addMsg = (data) =>  
        @::chatMessages.push(data)

一方、これは

class Window.AppViewModel
    constructor : ->
        @message = ko.observable("")
        @chatMessages = ko.observableArray()
        @canSendMessage = ko.observable(false)
        Window.sHub.addMsg = (data) =>  
            @chatMessages.push(data)

サーバー側のハブサーバー メッセージを受信することになりますが、コールバックを行うことはできません。

ここで何が欠けていますか??? これは私を壁に追いやっています。明らかに、プロトタイプ ベースのソリューションはすべてを「静的」にするため機能しますが、現時点では適切に分離されたコードを記述できないため、私は不自由です。

ハブが何を呼び出そうとしているかを確認する方法はありますか?? SignalR のドキュメントでは、トレース/ログ記録について説明していますが、その方法については説明していません。

4

1 に答える 1

1

すべての有線クライアント イベントは、hubProxy プロトタイプの jquery.SignalR の "On" 匿名関数に小さなスニペットを追加することで見つけることができます。

だから今、それはこのように見えます

   on: function (eventName, callback) {
            /// <summary>Wires up a callback to be invoked when a invocation request is received from the server hub.</summary>
            /// <param name="eventName" type="String">The name of the hub event to register the callback for.</param>
            /// <param name="callback" type="Function">The callback to be invoked.</param>
            var self = this;

            // Normalize the event name to lowercase
            eventName = eventName.toLowerCase();
            console.log(eventName + " callback was registered on the client");
            $(self).bind(eventNamespace + eventName, function (e, data) {
                callback.apply(self, data);
            });
            self.subscribed = true;
            return self;
        }

そして、サーバーからコールバックできるクライアントメソッドの優れた出力を提供します

また、CreateHubProxies (追加したコールバックを介して反映) は、hub.Start() 全体に対して 1 回しか呼び出されないことを知りました。つまり、開始するに、すべてのメソッドをハブ プロキシに追加する必要があります。

これは間違いなく github wiki にあるはずです。それは理にかなっていますが、明らかではありません。

編集: CreateHubProxies を複数回呼び出せるようにすることは理にかなっています。人々は、特定のイベントが発生するまでビューモデルの割り当てを遅らせる方法で Knockout.js コードを記述することに慣れています。ビューモデルに SignalR コールバックがある場合、これは不可能ではありません。すべてのビューモデルを前もって作成しなければならないのは、ちょっと面倒です。既に生成されたプロキシ メンバーのリストを保持し、それらを除外することで、かなりスリムに保つこともできます。

于 2012-09-11T02:34:48.380 に答える