[英]Do you need to place a knockout.js binding handler in jQuery's document.ready
[英]jQuery document ready with Knockout.js
我刚刚进入Umbraco ASP.NET CMS进行我的最新项目,我不确定这是否是全面的,但对于我的设置Knockout.js正在做所有的模板。
我不是太热衷于knockout.js但是到目前为止它一直很简单,除了当我开始添加一些jQuery的东西时,我遇到的问题是jQuery在敲除之前已经完成了填充页面的所有元素。
到目前为止,唯一对我有用的解决方案是我的所有jQuery内容都包含在setTimeout()函数中,这显然是不行的。
使jQuery和Knockout协同工作的最有效方法是什么,所以jQuery在敲除之前不会完成?
我最近遇到了与jSignature插件和我的Knockout视图相同的问题。 在调用jSignature之前,我需要KO视图完全呈现,否则它本身的大小不正确。
我用模板绑定和afterRender回调函数修复它来调用jQuery工作。
这是KO文档:
http://knockoutjs.com/documentation/template-binding.html
这是一个快速的jsfiddle,展示了如何使用它:
诀窍是你可以使用模板绑定的afterRender回调而不实际使用模板本身。 相反,您将所有现有HTML包装在将调用afterRender回调的div中:
<div data-bind="template: {afterRender: initApp}">
<!-- your existing HTML here -->
</div>
initApp是执行jQuery工作的函数。
我认为通常应该做你需要的,但如果你的HTML特别复杂,或者你需要在一个页面内渲染很多视图,你可能需要做更多的工作。 让我知道你是如何进行的 - 也许我可以尝试多一点帮助,如果这不能像我一样轻松解决你的问题!
更新 - 遵循下面JACL的评论 - 这里是小提琴的扩展版本,显示此技术也与ko-if一起使用。 每次使用复选框显示/隐藏“小部件”时,都会应用不同的随机颜色来指示afterRender功能执行其工作。
也许window.load而不是document.ready将成功
您可以使用: $(window).load(function(){ /* code */ });
而不是$(document).ready();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.