0

我正在尝试找到一种方法,如何通过 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"}]
4

1 回答 1

1

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

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();
于 2012-10-02T14:14:21.110 回答