2013-05-29 2 views
1

Мне явно не хватает очевидного здесь, но это уже давно.Магистральная модель смены save - бесконечный цикл?

Следующий код создает бесконечный цикл в браузере:

M = Backbone.Model.extend({ 
    localStorage: new Backbone.LocalStorage("ModelName"), 
    initialize: function() { 
     this.on("change", this.save, this); 
    } 
}); 

Хотя следующий код работает отлично:

M = Backbone.Model.extend({ 
    localStorage: new Backbone.LocalStorage("ModelName"), 
    initialize: function() { 
     this.on("change", this.modelChanged, this); 
    }, 
    modelChanged: function() { 
     this.save(); 
    } 
}); 

В чем разница?

(Да, я использую локальное хранилище для модели, а не коллекций, но модель одноэлементна, что не существует в коллекции.)

+1

Вы пытались использовать 'silent: true', чтобы ваше сохранение не вызывало событие Change? – RelevantUsername

ответ

5

change события передает аргументы в его обработчик, и если save вызывается с аргументами, он применяет их как новые атрибуты к модели и вызывает событие change (которое передает атрибуты для сохранения ... что вызывает изменение ... и т. д.)

+0

Сладкий! Я знал, что это очевидно. Благодаря! (Из документов: «Вызов сохранения с новыми атрибутами приведет к немедленному событию« change ») –

Смежные вопросы