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);
});