2013-04-01 60 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