2013-04-08 3 views
0

У меня есть отношения с альбомами и песнями. В новом альбоме я прошу песни в одно и то же время, сначала я пытаюсь сохранить модель альбома, а затем сохранить коллекцию песен и прикрепить ее к альбому.Backbone - sync не обнаруживает мою коллекцию url

Мое определение коллекции песня:

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

Попробуйте установить свойство 'urlRoot' вашей модели (а не коллекции). – craftsman

+0

Я тоже пробовал, но он продолжает возвращать ту же ошибку. – Nocturn

ответ

2

Вам необходимо сохранить каждую песню отдельно. sync не предназначен для прямого вызова, и только метод «чтение» предназначен для работы с коллекцией. 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);       
    } 
}); 
+1

Спасибо! Это была проблема. Я думал, что вы можете сохранить целую коллекцию сразу. – Nocturn