我正在尝试通过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"}]
答案 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();