2013-04-01 57 views
1

我想要集成socket.io与backbone.js,所以基本上我有一个节点服务器,从数据库获取数据并将数据发送到骨干客户端,客户端模型应该以某种方式检索传入的数据,但我不知道如何将socket.io放入模型中,只是在尝试失败后感到困惑。任何专家请欣赏我将不胜感激!Node.js服务器发送数据到主干模型

节点服务器网址/图片发出数据到客户

app.get('/pics', function(req, res){ 
    db.collection('pics', function(err, collection) { 
     collection.find().toArray(function(err, items) { 
      io.sockets.on('connection', function (socket) { 
       socket.emit('news', items); 
      }); 
     }); 
    }); 
}); 

客户端在骨干模型应该找回发射数据(这种模式适用于普通的HTTP数据发送):​​

window.Pic = Backbone.Model.extend({ 
    urlRoot: "/pics", 
    idAttribute: "_id", 
    initialize: function(){}, 
    defaults: { 
     _id: null, 
     name: "", 
     date: "", 
    } 
}); 

window.PicCollection = Backbone.Collection.extend({ 
    model: Pic, 
    url: "/pics" 
}); 

回答

0

我必须承认在节点+ socket.io上使用Backbone非常有趣。尽管如此,仍然没有把我的想法付诸实施。首先,你有没有考虑使用插件骨干网络套接字?有些人创造了这样的。

为了给出另一种方法,我认为你没有太多选择余地。使用socket.io听传入的数据会导致这样的事情:

socket.on('model', function(attributes) { 
    // do something 
}); 

所以你必须访问某些集合在那里你可以手动更新您的模型。

如果您希望真正在模型中使用socket.io,更透明的方法是扩展您的模型以开始在创建时监听某个自定义事件。我会链接一个jsfiddle来展示可以做些什么。

编辑:here you go.
请注意,这是全样板。我试图找出一种方法来做一个通用的socketModel。我会更新,如果我找到一个。

+0

感谢您的回复!有趣的是看到别人怎么做:) – nihulus

+0

是的。但它也将取决于你有什么服务器端。我的意思是,你可以在服务器上使用Backbone,这可能是一个很好的组合。尽管如此,仍然没有把我的想法付诸实施。 – Loamhoof