Итак, этот вопрос вытекает из моего предыдущего вопроса При каких условиях перерисовывает собственный шаблон Knockout
После некоторого исследования оказалось, что если шаблон определяет функцию afterRender
и эта функция afterRender
ссылается на модель детали, то, если эта часть модели впоследствии изменяется, функция afterRender
вызывается снова.
Это поведение похоже на computedObservables
(также известное как dependentObservables
), где нокаут отслеживает, от каких частей модели он зависит, а затем повторно запускает computedObservables
всякий раз, когда изменяется одно из значений, от которых он зависит.
Чтобы продемонстрировать это, я написал jsFiddle: http://jsfiddle.net/unklefolk/nczCt/1/
Как и ожидалось, функция afterRender вызывается при рендеринге представления. Однако, если вы установите флажок, функция afterRender запустится снова, так как она использует viewModel.selectedPet().pet().IsHappy()
Это не имеет смысла для меня. Итак, мой вопрос:
- Это ошибка, связанная с повторным запуском функции
afterRender
? - Как убедиться, что функция
afterRender
запускается только один раз?
Заранее спасибо.