jQuery文档准备好了

jQuery document ready with Knockout.js

本文关键字:准备好了 文档 jQuery      更新时间:2023-09-26

我刚被扔进了Umbraco ASP。. NET CMS为我的最新项目,我不确定这是如何全面,但对于我的设置Knockout.js正在做所有的模板。

我不太热衷于knockout.js,但到目前为止,它是相当直接的,除了当我开始添加一些jQuery的东西,我的问题是,在knockout已经完成填充所有元素的页面之前,jQuery正在开火。

唯一的解决方案,为我工作到目前为止是我所有的jQuery的东西都包装在setTimeout()函数,这显然是不好的。

什么是最有效的方式使jQuery和Knockout一起工作,使jQuery在Knockout完成之前不工作?

我最近与jSignature插件和我的Knockout视图有同样的问题。我需要在调用jSignature之前完全渲染KO视图,否则它不能正确地调整自己的大小。

我用一个模板绑定和一个afterRender回调函数来调用jQuery的工作。

以下是KO文档:

http://knockoutjs.com/documentation/template-binding.html

下面是一个快速示例,演示如何使用它:

http://jsfiddle.net/PCbFZ/

技巧在于你可以使用模板绑定的afterRender回调,而不必实际使用模板本身。相反,您将所有现有的HTML包装在一个div中,该div将调用afterRender回调:

<div data-bind="template: {afterRender: initApp}">
  <!-- your existing HTML here -->
</div>

initApp是执行jQuery工作的函数。

我认为这通常应该做你需要的,但如果你的HTML特别复杂,或者你有许多视图,你需要在一个页面内呈现,你可能需要做更多的工作。让我知道你是如何进行的-也许我可以试着帮助一点多,如果这不能完全解决你的问题,因为它做了我的!


更新-遵循下面JACL的评论-这里是小提琴的扩展版本,展示了这种技术也可以与ko-if一起使用。每次您使用复选框显示/隐藏"小部件"时,都会应用不同的随机颜色来指示afterRender函数正在执行其工作。

http://jsfiddle.net/PCbFZ/15/

你可以使用:$(window).load(function(){ /* code */ });代替$(document).ready();

可能是窗口。加载而不是文档。Ready就可以了