所以这个问题是我之前的问题在什么情况下 Knockout 原生模板重新渲染的问题
经过一番调查,似乎如果模板定义了一个afterRender
函数并且该afterRender
函数引用了一个零件模型,那么如果该模型的该部分随后被更改,afterRender
则再次调用该函数。
这种行为似乎类似于computedObservables
(aka dependentObservables
),其中敲除跟踪它所依赖的模型的哪些部分,然后在它所依赖的值之一发生变化时重新运行computedObservables
。
为了证明这一点,我写了一个 jsFiddle:http: //jsfiddle.net/unklefolk/nczCt/1/
正如预期的那样,在渲染视图时会调用 afterRender 函数。但是,如果您单击该复选框,则 afterRender 函数将再次运行,因为它使用viewModel.selectedPet().pet().IsHappy()
这对我来说没有意义。所以我的问题是:
- 这是
afterRender
函数正在重新运行的错误吗? - 如何确保该
afterRender
功能只运行一次?
提前致谢。