Javascript 当所有控件都完全绑定到数据时,如何拦截事件?

Javascript 当所有控件都完全绑定到数据时,如何拦截事件?,javascript,asp.net-mvc-3,knockout.js,Javascript,Asp.net Mvc 3,Knockout.js,我正在开发一个MVC3应用程序,它使用knockout.js作为客户端js库。我们有一个复杂的屏幕,上面有类似列表的控件和网格,这些控件和网格由javascript使用knockout.js填充数据。我的问题是,当所有控件都已完全绑定(即准备供最终用户使用)时,我不知道如何拦截事件。目前,页面在7秒内加载到浏览器中,但是控件绑定到数据大约需要20-30秒,这使得页面无法使用,直到一切就绪。有没有办法知道所有控件何时完全绑定?提前谢谢 只要viewmodels或自定义绑定中没有任何异步逻辑,就可以

我正在开发一个MVC3应用程序,它使用knockout.js作为客户端js库。我们有一个复杂的屏幕,上面有类似列表的控件和网格,这些控件和网格由javascript使用knockout.js填充数据。我的问题是,当所有控件都已完全绑定(即准备供最终用户使用)时,我不知道如何拦截事件。目前,页面在7秒内加载到浏览器中,但是控件绑定到数据大约需要20-30秒,这使得页面无法使用,直到一切就绪。有没有办法知道所有控件何时完全绑定?提前谢谢

只要viewmodels或自定义绑定中没有任何异步逻辑,就可以直接在applyBindings之后放置一行代码:

ko.applyBindings(myViewModel);   
doSomethingElse();
这里有一个长时间运行的活页夹演示了这一点(请务必打开控制台以查看输出):

但是,如果您确实有异步逻辑(例如使用ajax调用web服务),那么您需要在完成所有操作后使用回调来运行代码。我通常做的是:

  • 使用一个布尔可观测值设置我的视图模型,该布尔可观测值指示数据尚未加载:
    self.isLoaded=ko.observable(false)

  • 添加一个“等待”指示器(微调器等),当可观测值为false时可见:
    20-30秒?听起来您的KO代码有严重的性能问题。