3

デフォルトの Backbone.sync 関数を、WebSocket 経由で同期する関数でオーバーライドしようとしています。これまでのところ、以下のコードを使用してフェッチ要求をサーバーに正常に送信できましたが、応答をキャッチする方法がわかりません。

ソケットの onmessage イベント ハンドラーを毎回リセットすることを提案する人を見てきましたが、一度に大量のデータが要求された場合 (1 つの要求に時間がかかる場合)、応答が同期しなくなる可能性があると思わずにはいられません。返答する)。

私がやろうとしていることを達成する方法の例はありますか?

var app = app || {};

function fnSync (sMethod, oModel, oOptions) {
    var bSuccess,
        sResponse;

    bSuccess = false;

    switch (sMethod) {
        case "read":
            if (oModel.id !== undefined) {
                app.socket.send(JSON.stringify({
                    "method": "get",
                    "url": oModel.url,
                    "id": oModel.get("_id")
                }));
            } else {
                app.socket.send(JSON.stringify({
                    "method": "get",
                    "url": oModel.url
                }));
            }
            bSuccess = true;
            break;

        default:
            throw "Backbone.sync doesn't know how to " + sMethod;
            bSuccess = false;
            break;
    }

    (bSuccess) ? oOptions.success() : oOptions.error();
}

(function () {

    app.socket = new WebSocket("ws://localhost:3001");
    app.socket.onopen = function () {
        Backbone.sync = fnSync;

        app.router = new app.Router();
        Backbone.history.start();
    }

    app.socket.onmessage = function (oMessage) {
        //console.log("Socket message", oMessage.data);
    }

})();
4

2 に答える 2

1

ネイティブ WebSocket で Backbone リソースを使用するためのBackbone.WS プロジェクトを確認できます。

于 2015-08-11T11:34:30.243 に答える