Github source codeПочему существует цикл while в методе setballbone?
Ниже приведен фрагмент метода набора Backbone в:
set: function(key, val, options) {
var attr, attrs, unset, changes, silent, changing, prev, current;
...
options || (options = {});
...
// Trigger all relevant attribute changes.
if (!silent) {
if (changes.length) this._pending = options;
for (var i = 0, length = changes.length; i < length; i++) {
this.trigger('change:' + changes[i], this, current[changes[i]], options);
}
}
// You might be wondering why there's a `while` loop here. Changes can
// be recursively nested within `"change"` events.
if (changing) return this;
if (!silent) {
while (this._pending) {
options = this._pending;
this._pending = false;
this.trigger('change', this, options);
}
}
this._pending = false;
this._changing = false;
return this;
}
Хотя комментарий сделал упомянуть while
петлю, я задаюсь вопросом о том, я не понимаю, как это работает в то время как петля с локальной переменной changing
всегда будет true
за один раунд set
.
Может ли кто-нибудь объяснить мне, почему есть время и когда оно вступит в силу?
Заранее благодарен!
Интересный вопрос. Не знаю ответа, мне придется проверить, что нужно знать. Но обратите внимание, что если 'change' истинно, то он выходит до цикла while. Если вы посмотрите немного раньше, изменение будет всегда ложным в первом событии изменения. Теперь, если событие изменения в цикле while запускает другое событие изменения, последующие изменения выходят до цикла while. Не знаю, почему. Ха-ха. – Gohn67
Что произойдет, если прослушиватель событий ''change'' вызывает' set'? –
@muistooshort - это то, что ваш комментарий Комментарий 'Изменения могут // быть рекурсивно вложенным в' 'change '' events' означает? Что кто-то звонит на событие 'change'? – seebiscuit