我正在使用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
这实际上很有趣。这意味着SongsCollection中的toJSON
方法有效,但toJSON
中的Song
却没有。我会在那里深入挖掘。
答案 0 :(得分:1)
问题解决了。我使用的是constructor
而不是initialize
,因此创建了一个没有任何attributes
的模型,因此调用toJSON返回undefined
,因为attributes
属性未定义
class Song extends Backbone.Model
initialize: ({@name, @path}) ->
console.log 'new'