使用Knockout.js准备好jQuery文档

时间:2014-07-18 05:55:37

标签: javascript jquery knockout.js umbraco

我刚刚进入Umbraco ASP.NET CMS进行我的最新项目,我不确定这是否是全面的,但我的设置Knockout.js正在做所有的模板。

我对knockout.js并不太热衷,但到目前为止它已经非常直接了,除非我开始添加一些jQuery的东西,我遇到的问题是jQuery正在解雇在淘汰赛完成之前填充所有元素的页面。

到目前为止,唯一能为我工作的解决方案是我的所有jQuery内容都包含在setTimeout()函数中,这显然是不行的。

使jQuery和Knockout协同工作的最有效方法是什么,所以jQuery在淘汰赛之前没有?

3 个答案:

答案 0 :(得分:4)

我最近遇到了与jSignature插件和我的Knockout视图相同的问题。在调用jSignature之前,我需要KO视图完全呈现,否则它本身的大小不正确。

我用模板绑定和afterRender回调函数修复它来调用jQuery工作。

以下是KO文档:

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

这是一个快速的jsfiddle,展示了如何使用它:

http://jsfiddle.net/PCbFZ/

诀窍是你可以使用模板绑定的afterRender回调而不实际使用模板本身。相反,您将所有现有HTML包装在将调用afterRender回调的div中:

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

initApp是执行jQuery工作的函数。

我认为通常应该做你需要的,但是如果你的HTML特别复杂,或者你需要在一个页面内渲染很多视图,你可能需要做更多的工作。让我知道你是如何进行的 - 也许我可以尝试多一点帮助,如果这不能像我一样轻松解决你的问题!


更新 - 遵循下面JACL的评论 - 这是小提琴的扩展版本,显示此技术也与ko-if一起使用。每次使用复选框显示/隐藏“小部件”时,都会应用不同的随机颜色来指示afterRender功能执行其工作。

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

答案 1 :(得分:0)

也许window.load而不是document.ready会做的伎俩

答案 2 :(得分:0)

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