Javascript 在页面加载时执行敲除计算

Javascript 在页面加载时执行敲除计算,javascript,knockout.js,Javascript,Knockout.js,基本上,我有一个下拉菜单来选择将有另一个下拉菜单加载。我有一个计算变量,取决于第一个下拉选择的值(我知道它可以订阅,但仍然)。但是计算结果是在页面加载时执行的,这是我不希望看到的,因为里面有一个AJAX调用页面加载时执行的原因是什么?如何避免 HTML: 据我所知,导致这种行为的不是页面加载本身,而是计算出的可观测值依赖于其他可观测值,在您的例子中,self.selectedDept。敲除发现计算所依赖的其他观测值,实际上是selectedDept值的变化导致重新计算计算 您无法避免这种行为,但

基本上,我有一个下拉菜单来选择将有另一个下拉菜单加载。我有一个计算变量,取决于第一个下拉选择的值(我知道它可以订阅,但仍然)。但是计算结果是在页面加载时执行的,这是我不希望看到的,因为里面有一个AJAX调用页面加载时执行的原因是什么?如何避免

HTML:


据我所知,导致这种行为的不是页面加载本身,而是计算出的可观测值依赖于其他可观测值,在您的例子中,
self.selectedDept
。敲除发现计算所依赖的其他观测值,实际上是
selectedDept
值的变化导致重新计算计算

您无法避免这种行为,但可以通过添加保护条件(读取:
if
语句)来避免AJAX调用的执行。我假设您的目标是在下拉列表中没有选择任何内容的情况下防止AJAX调用,毕竟,这是实现这一点最直接的方法


没有其他方法可以解决这个问题,只是因为如果你仔细想想,计算的全部目的是在任何其他可观察到的情况下重新评估自身,而无需手动干预。

据我所知,导致这种行为的不是页面加载本身,但事实上,计算的可观测值依赖于其他可观测值,在您的例子中,
self.selectedDept
。敲除发现计算所依赖的其他观测值,实际上是
selectedDept
值的变化导致重新计算计算

if(!self.selectedDept()){return}
您无法避免这种行为,但可以通过添加保护条件(读取:
if
语句)来避免AJAX调用的执行。我假设您的目标是在下拉列表中没有选择任何内容的情况下防止AJAX调用,毕竟,这是实现这一点最直接的方法

没有其他方法可以绕过它,只是因为如果你仔细想想,一个计算机的全部目的就是在任何其他可观察到的情况下重新评估它自身的价值,而不需要人工干预

if(!self.selectedDept()){return}
如果未选择任何选项,则使用此if语句取消计算中的功能

如果未选择任何选项,则使用此if语句取消计算中的功能


你可以参考这里,你可以参考这里,我建议你使用subscribe而不是compute来完成你想做的事情。然后你得到你订阅的可观测值作为一个参数,如果没有值,你可以很容易地返回。我建议你使用一个订阅,而不是计算,来完成你想要做的事情。然后你得到你订阅的可观测值作为参数,如果没有值,你可以轻松返回。
if(!self.selectedDept()){return}