Функции конструктора базовой модели ожидают объект словаря с ключами и значениями, которые будут установлены в этой модели. Вы не предоставили объект, а вместо этого предоставили 2 строки. Ошибка вызвана тем, что магистраль пытается перебрать объект, но взрывается, потому что вы не можете легально сделать for (key in "easy")
.
Вы также не должны использовать свойства для данных модели. Вы должны использовать объект при создании экземпляра или set()
и get()
. Итак, если я могу исправить ваш код:
jQuery ->
root = global ? window
class Game extends Backbone.Model
initialize: ->
console.log "--> Game.initialize()"
difficulty: ->
@get 'diff'
name: ->
@get 'n'
# Make class Game globally available
root.Game = Game
my_game = new Game n: 'easy', diff: 'hard'
console.log "my_game.name(), my_game.difficulty() --> #{my_game.name()}, #{my_game.difficulty()}"
Посмотрите на этот пример, работающий здесь: http://jsfiddle.net/NMkna/
Обратите внимание, что мы больше не принимаем аргументы при инициализации. Мы можем положиться на магистраль, чтобы установить правильные атрибуты в модели, потому что теперь мы передаем объект при создании игры. И методы, которые мы определяем просто @get 'propname'
, чтобы получить эти значения.