2013-10-03 3 views
3

Я пытаюсь переопределить функцию Backbone.sync по умолчанию с синхронизацией через WebSockets. Пока мне удалось успешно отправить запрос на выборку на сервер, используя следующий код, но я не знаю, как поймать ответ.Backbone.js sync using native websockets

Я видел, как люди предлагали каждый раз перезапускать обработчик событий 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); 
    } 

})(); 

ответ

0

Метод мы используем включает в себя использование Backbone-relational и Model.findOrCreate({id: response.id}) в socket.onmessage обработчика для отправки обновлений с помощью простого model.set(), когда мы находим его.

В ситуации, когда у нас нет идентификаторов, мы используем только те клиентские временные идентификаторы, которые API предназначен для игнорирования и возврата как есть, поэтому мы можем различать и отслеживать ответы.

1

Вы можете проверить Backbone.WS project на использование ресурсов базовой линии над собственным WebSocket.

Смежные вопросы