我正在尝试将socket.io与bone.js集成在一起,所以基本上我有一个节点服务器,该节点服务器从数据库获取数据并将数据发送到骨干客户端,客户端的模型应该以某种方式检索传入的数据,但我不是确定现在如何将socket.io放入模型中,只是在尝试失败后感到困惑。请高手赐教,不胜感激!

节点服务器以url / pics向客户端发射数据

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


Backbone模型中的客户端应检索发出的数据(此模型适用于正常的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"
});

最佳答案

我必须承认,在node + socket.io上使用Backbone非常有趣。仍然没有投入我的想法。首先,您是否考虑过将插件Backbone用于Websocket?有些人创造了这样的东西。

要给出另一种方法,我认为您实际上没有太多选择。使用socket.io侦听传入的数据将导致类似以下情况:

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


因此,您必须有权访问一些集合,您可以在其中手动更新模型。

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

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

09-25 18:29
查看更多