Backbone.Collection не имеет метода toJSON
Я пишу небольшое приложение, используя Backbone. Я начинаю создавать SongsView, который создает SongsCollection. Я получаю эту коллекцию для извлечения данных из внешнего API, который я написал. Следующим шагом является рендеринг выбранных данных с использованием toJSON
метод, однако вызывающий toJSON
возвращается [undefined]
Несмотря на то, что коллекция является экземпляром Bakcbone.Collection.
Вот мой код (в coffeescript):
Приложение:
songs = new SongsView
songs.render()
SongsView:
SongsCollection = require 'scripts/collections/songs'
class SongsView extends Backbone.View
el: '#songs'
render: ->
songs = new SongsCollection
songs.fetch
success: ( res ) =>
console.log (res instanceof Backbone.Collection) # true
console.log (res instanceof SongsCollection) # true
console.log (res.toJSON()) # [undefined]
SongsCollection:
Song = require 'scripts/models/song'
class SongsCollection extends Backbone.Collection
model: Song
url: 'http://localhost:1337/songs'
Песня:
class Song extends Backbone.Model
constructor: ({@name, @path}) ->
console.log 'new'
РЕДАКТИРОВАТЬ: Если я смотрю на цепочку прототипов, я могу найти метод toJSON(), хотя:
EDIT²: одинаковое поведение для одной модели:
console.log (res.models[0].toJSON()) # undefined
Что на самом деле интересно. Это означает, что toJSON
метод из SongsCollection работает, но toJSON
от Song
не. Я буду копать глубже там.
1 ответ
Задача решена. Я использовал constructor
вместо initialize
что приводит к созданию модели без каких-либо attributes
таким образом, вызов toJSON вернул undefined
как attributes
свойство не было определено.
class Song extends Backbone.Model
initialize: ({@name, @path}) ->
console.log 'new'