Код:
class Session extends Backbone.Model
initialize: ->
@bind 'change', @save
console.log 'init'
class SessionList extends Backbone.Collection
model: Session
localStorage: new Store 'sessions'
sessions = new SessionList
a = new Session x: 'test'
sessions.add a
console.log a.get 'x'
a.set x: 'new'
console.log a.get 'x'
При загрузке на страницу с помощью Backbone.localstorage консоль выдает:
init
test
Uncaught TypeError: Cannot read property 'localStorage' of undefined
backbone-localstorage.js:70
Backbone.sync
_.extend.save
backbone-localstorage.js:70
Backbone.Events.trigger
backbone.js:304
_.extend.change
backbone.js:117
А когда я закомментирую вызов @bind, я получаюожидается:
init
test
new
Я также могу успешно сохранить вручную после добавления a
в sessions
с вызовом a.save()
.
Полагаю, проблема в том, что конструктор Session вызывает событие change
, а save()
не знает, что делать, прежде чем a
будет добавлен в sessions
?Вместо этого я мог бы сделать что-то вроде этого:
class Session extends Backbone.Model
set: (fields, ops) ->
super fields, ops
if (this has been added to a Collection)
@save()
Это лучший способ сделать это?Если да, как мне заполнить оператор if?