Переполнение стека при сохранении модели Backbone.js - PullRequest
2 голосов
/ 17 декабря 2011

У меня есть простая модель Backbone.js:

class Avia.Student extends Backbone.Model

Сказал вам, что это было просто :-) Во всяком случае, я сохраняю его в следующем представлении (вырезано для ясности):

class Avia.StudentView extends Backbone.View

  render: =>
    html = JST['views/student_view_template'](model: @model)
    @el.html(html)
    Backbone.ModelBinding.bind(@)
    $('#save').bind('click', @save)

  save: (e) =>
    e.preventDefault()
    @model.save(
        success: =>,
        error: =>
    )

Когда я нажимаю кнопку сохранения, вызывается @save (), но происходит сбой из-за следующей ошибки (опять же, для ясности перебил, поскольку очевидно, что она продолжается в течение длительного времени):

Uncaught RangeError: Maximum call stack size exceeded
Backbone.Events.trigger:117
_.extend._onModelEvent:635
Backbone.Events.trigger:117
_.extend._onModelEvent:635
Backbone.Events.trigger:117
_.extend._onModelEvent:635
Backbone.Events.trigger:117

Может кто-нибудь сказать мне, что я делаю не так?Я не понимаю, почему это происходит ...

Ответы [ 2 ]

2 голосов
/ 18 декабря 2011

Вам нужно вызвать super() в конструкторе вашей коллекции и / или модели (если вы его определили).У меня была такая же проблема пару дней назад: при пропущенном вызове super() не удается привязать объект _onModelEvent к коллекции, что вызывает его вызов в неправильном контексте (this указывает на модель вместоколлекция [и наоборот]).

0 голосов
/ 28 декабря 2011

Вам необходимо привязать функцию сохранения к представлению.

Вы делаете это, вызывая _.bindAll в методе инициализации представления

class Avia.StudentView extends Backbone.View

  initialize: =>
    _.bindAll(@, 'save');
...