Knockout.js 在ko.applyBindings上是否有某种回调?

Knockout.js 在ko.applyBindings上是否有某种回调?,knockout.js,Knockout.js,在我们当前的项目中,我们已经多次提到这一点 如何确保某段Javascript代码只有在页面上的所有绑定都被敲除后才能执行? 在我的特定用例中,我使用if-bindings来评估一些配置选项,并决定是否应该呈现内部元素(=在DOM中)。只有在对这些绑定求值之后,我才需要计算某个元素中的DOM节点数。显然,如果我过早地计算,那么绑定还没有删除那些不需要的DOM节点,因此计算结果是错误的。这可能会有所帮助。您可以使用模板绑定包装绑定(并将任何其他绑定放入模板中),然后传递“afterRender”处理

在我们当前的项目中,我们已经多次提到这一点

如何确保某段Javascript代码只有在页面上的所有绑定都被敲除后才能执行?


在我的特定用例中,我使用
if
-bindings来评估一些配置选项,并决定是否应该呈现内部元素(=在DOM中)。只有在对这些
绑定求值之后,我才需要计算某个元素中的DOM节点数。显然,如果我过早地计算
,那么绑定还没有删除那些不需要的DOM节点,因此计算结果是错误的。

这可能会有所帮助。您可以使用模板绑定包装绑定(并将任何其他绑定放入模板中),然后传递“afterRender”处理程序。在呈现内容后将调用此处理程序。 我美化了上面提到的JSFIDLE(在评论中):

var模型={
afterRenderCallback:函数(){
//呈现内容后将调用此方法
var divContent=document.getElementById(“textdiv”).innerHTML;
警报(内容);
},
txt:ko.observable(“本文本将在div中替换”)
};
ko.应用绑定(模型)
.content{
边框:1px纯红;
}

ko.applyBindings()
是一个,因此下一条语句应该只在完成后执行。如果您有敲除组件,则可以同步或异步加载它们。比如说

var vm = new ViewModel();
ko.applybindings(vm);
//
CountRenderedElements();

应该会给您正确的结果。

可能是根绑定的afterRender回调()对您有帮助吗?如果在ko.applyBindings上有此功能-是。但它似乎只在某些特定绑定上可用。在正确应用所有适用的绑定(包括所有组件、子组件等)之后,我需要一个钩子。就像没有异步调用未完成,页面处于“完成”和“准备就绪”状态一样。我脑子里只想到了一件事-你可以用包装模板包装你想要处理的绑定-就像在小提琴中一样-在模板绑定内容呈现后将调用函数“ar”。你可能应该包括对你的情况的真实再现。如果没有它,问题就可以简单地解决:您通过在
applyBindings
…@Jeroen之后执行该脚本来执行“某段Javascript[在应用绑定之后]”,而不是作为一个特定的代码问题,如果在大规模项目中应用淘汰制,那么每个淘汰制开发人员迟早都会遇到这个问题。因此,请将其视为一个一般性问题,即如何使用Knockout.js解决某个问题。Good one整洁地解释了+1。