1

我正在尝试将socket.io与backbone.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"
});
4

1 回答 1

0

我必须承认在 node + socket.io 上使用 Backbone 非常有趣。不过还没有把心思放在里面。首先,您是否考虑过为 websockets 使用插件 Backbone?有些人创造了这样的。

给出另一种方法,我认为您实际上没有太多选择。使用 socket.io 来监听传入的数据会导致这样的结果:

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

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

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

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

于 2013-04-02T08:10:18.467 回答