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 データベースに書き込みます。「ロード」しようとすると、データベースから正しいデータが取得されますが、collectionState オブジェクトを 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 に答える