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'
Другие вопросы по тегам