使用节点在Backbone中获取和检索集合

时间:2012-10-02 08:49:57

标签: node.js backbone.js

我正在尝试通过nodeJS找到一种方法来保存和检索我的集合的整个状态到服务器(MySQL)。因此,我已经覆盖了集合的获取和保存功能

var TrackList = Backbone.Collection.extend({
 model: app.Track,
 fetch: function() {
  var socket = io.connect('http://localhost:9001');
  socket.emit('load', {id: window.id});
  socket.on('success', function(data) {
   var collectionState = JSON.parse(data[0].data);
   //now what to do with the collectionState on fetch
  }
 },
 save: function() {
  var socket = io.connect('http://localhost:9001');
  socket.emit('save', { project: app.Tracks.toJSON(), id: window.id });
 }
});
app.Tracks = new TrackList();
app.Tracks.fetch();

保存工作正常,并使用node-mysql将其写入MySQL数据库。在尝试“加载”时,我从数据库中获取了正确的数据,但我不知道如何将colletionState对象推送到TrackList本身。

JSON的格式正确(至少我认为)

[{"modelAttr1":"attr1","modelAttr2":"attr2"}]

1 个答案:

答案 0 :(得分:1)

您可以调用该集合的add方法。如果传递一个Object,它会创建一个新模型并添加到集合中,但是如果你传递一个数组(就像你的情况那样),它会将数组的每个项目转换为集合的模型,所以你只需要发送响应。像这样:

var TrackList = Backbone.Collection.extend({
 model: app.Track,
 initialize : function(){
   //helpful for catch the "this" in the AJAX response to the current Collection
   _.bindAll(this);
 },
 fetch: function() {
  var socket = io.connect('http://localhost:9001');
  socket.emit('load', {id: window.id});
  socket.on('success', this.parse);
 },
 parse: function(data){
   var collectionState = JSON.parse(data[0].data);
   this.add( collectionState );
 },
 save: function() {
  var socket = io.connect('http://localhost:9001');
  socket.emit('save', { project: app.Tracks.toJSON(), id: window.id });
 }
});
app.Tracks = new TrackList();
app.Tracks.fetch();