3

我正在尝试使用通过 WebSockets 同步的函数来覆盖默认的 Backbone.sync 函数。到目前为止,我已经成功地使用下面的代码向服务器发送了一个获取请求,但我不知道如何捕获响应。

我见过有人建议每次都重置套接字 onmessage 事件处理程序,但我不禁认为,如果一次请求大量数据(如果一个请求需要很长时间),这可能会导致响应不同步回复)。

有没有关于如何实现我想要做的事情的例子?

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

您可以查看Backbone.WS 项目,了解在本机 WebSocket 上使用 Backbone 资源。

于 2015-08-11T11:34:30.243 回答
0

我们使用的技术涉及使用Backbone-relationalModel.findOrCreate({id: response.id})在处理程序中,当我们找到它时socket.onmessage用一个简单的方法分派更新。model.set()

在我们没有 id 的情况下,我们使用 API 旨在忽略并按原样返回的仅限客户端的临时 ID,以便我们可以区分和跟踪响应。

于 2013-10-04T08:02:59.117 回答