Backbone.js 和socket.io学习笔记

网址  http://developer.teradata.com/blog/jasonstrimpel/2011/11/backbone-js-and-socket-io

Backbone.js 和socket.io学习笔记

Backbone.js 是一个轻量级的javascript MVC框架。默认的CRUD操作用的是xhr ,Socket.io 是一个Node.js 运行起来的web server.这篇文章就来谈谈通过传统的Backbone.sync方法使用sockect.io 来做数据操作。

注意   Backbone.sync  用于数据通信的操作。    node.js 相结合

Backbone.sync

当一个模型或集合被修改,服务器的save被调用 (fetch save destroy) 

Backbone.sync随之被调用,一个CRUD操作在后台执行。


展示些代码

在下面的代码中默认的对象、集合增加了一个对象this.ctx. 它提供了一个操作的上下文环境,并且应该在一个Backbone Model 或Collection 的initialize 方法中定义。请阅读注释。随着你的特定需求这个想法可以得到扩展。这是个尝试性的程序,作者不保证它是好的。请包涵吧。

Backbone.sync = function(method,model,options) {

  var socket = window.NAMESPACE.scoket;

var signature = fuction() {

  var sig = {};

  sig.endPoint = model.url + (model.id? ('/' + model.id) :'');

  if(model.ctx) sig.ctx = model.ctx;

  return sig;

}

var event = function(operation ,sig) {

  var e = operation + ':';

  e += sig.endPoint;

  if(sig.ctx) e += (':' + sig.ctx);

  

}

var create = function() {

  var sign = signature(model);

      var e = event('create', sign);

  scoket.emit('create',{'signature':sign,item:model.getAttributes});

  scoket.once(e,function(data) {

    model.id = data.id;

    console.log(model);

  });

}

var read = function(){

  var sign = signature(model);

  var e = event('read',sign);

  socket.emit('read', {'signatur',sign});

  socket.once(e.function(data) {

    option.success(data);

  });

}

var udpate = function(){

  var sign = signature(model);

  var e = event('update', {'signature':sign,item:model});

  socket.once(e,function(data) {

    console.log(data);

  });

}

switch(method) {

  case 'create' :

    create();

  

 break;       
        case 'read'
            read();
            break
        case 'update':
            update();
            break;
        case 'delete':
            destroy();
            break;

}

   }

Node.js socket.io 

var io = require('socket.io').listen(3000);

var create = function (socket,signature) {

  var e = event('create',signature),data = [];

  socket.emit(e,{id:1});

}

var read = function(socket,signature) {

  var e =  event('read', signature),data;

  data.push({});

  socket.emit(e,data);

}

var update = function(socket,signature) {

  var e = event('update', signature),data = [];

}

var event = function (operation, sig) {
    var e = operation + ':';
    e += sig.endPoint;
    if (sig.ctx) e += (':' + sig.ctx);
 
    return e;
};
 
io.sockets.on('connection', function (socket) {
    socket.on('create', function (data) {
        create(socket, data.signature);      
    });     
    socket.on('read', function (data) {
        read(socket, data.signature);
    }); 
    socket.on('update', function (data) {
        update(socket, data.signature);      
    });
    socket.on('delete', function (data) {
        destroy(socket, data.signature);      
    });               
原文地址:https://www.cnblogs.com/yushunwu/p/2369056.html