我有专辑和歌曲的关系。在新专辑视图中,我同时要求播放歌曲,我首先尝试保存专辑模型,然后保存歌曲集并将其附加到专辑中。
我的歌曲集合定义:
define(function(require){
var Song = require('models/songModel');
Songs = Backbone.Collection.extend({
url: 'songs/',
model: Song,
});
return Songs;
});
我创建了这样的歌曲集:
this.songCollection = new Songs();
//In some other view that saves the songs files and returns a hash
that.songCollection.add({title:file.name,song_file:response['file_hash']});
然后我保存了我的专辑模型并成功尝试保存歌曲集合,将新专辑pk添加到歌曲集合中的所有模型中:
that = this;
this.model.save(null,{
success: function(model,response){
that.songCollection.each(function(song){
song.set('album',model.get('id'));
});
that.songCollection.sync('create');
},
error: function(response){
console.log(response);
}
});
然而它返回A 'url' property or function must be specified
,但我确实已经指定了,如您之前所见。我还尝试在同步调用之前记录它并正确返回url。我在这个过程中遗漏了什么?或者我不能像我这样在我的服务器上创建所有这些新歌?
答案 0 :(得分:2)
您需要单独保存每首歌曲。 sync
并不意味着直接调用,只有方法“read”才能用于集合。在sync('read')
期间调用collection.fetch()
。
that = this;
this.model.save(null,{
success: function(model,response){
that.songCollection.each(function(song){
song.save({album: model.get('id')});
});
},
error: function(response){
console.log(response);
}
});