Backbone.Collection没有toJSON方法

时间:2013-12-13 15:11:08

标签: javascript backbone.js coffeescript backbone-collections

我正在使用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()方法: enter image description here

EDIT²:单个模型的行为相同:

console.log (res.models[0].toJSON()) # undefined

这实际上很有趣。这意味着SongsCollection中的toJSON方法有效,但toJSON中的Song却没有。我会在那里深入挖掘。

1 个答案:

答案 0 :(得分:1)

问题解决了。我使用的是constructor而不是initialize,因此创建了一个没有任何attributes的模型,因此调用toJSON返回undefined,因为attributes属性未定义

class Song extends Backbone.Model

initialize: ({@name, @path}) ->
    console.log 'new'