jquery – 成功回调后knockout.js完成渲染所有的元素

前端之家收集整理的这篇文章主要介绍了jquery – 成功回调后knockout.js完成渲染所有的元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经实现了一个knockout foreach绑定,在同一页面中的多个模板,其中一个示例在这里,我感兴趣的是找出一个块完成渲染,我试过afterRender和afterAdd,但我想它运行对于每个元素,而不是在整个循环完成后。
  1. <ul data-bind="foreach: {data: Contacts,afterAdd: myPostProcessingLogic}">
  2. <li>
  3. <div class="list_container gray_bg mrgT3px">
  4. <div class="list_contact_icon"></div>
  5. <div class="contact_name"><span data-bind="text: first_name"></span> <span data-bind="text: last_name"></span></div>
  6. <div class="contact_number"><span data-bind="text: value"></span></div>
  7. <div class="callsms_container"> <a href="#notification-Box" class="notifcation-window">
  8. <div class="hover_btn tooltip_call">
  9. <div class="hover_call_icon"></div>
  10. <span>Call</span></div>
  11. </a> <a class="sendsms" href="#sendsms" rel="#sendsms">
  12. <div class="hover_btn tooltip_sms">
  13. <div class="hover_sms_icon"></div>
  14. <span>SMS</span></div>
  15. </a> <a href="#">
  16. <div class="hover_more_btn"></div>
  17. </a> </div>
  18. <!-- close callsms container -->
  19. <div id="notification-Box" class="notification-popup"> <a href="#" class="close"><img class="btn_close" src="images/Box_cross.png"/></a> <img class="centeralign" src="images/notification_call.png"/> <span>Calling... +44 7401 287366</span> </div>
  20. <!-- close notification Box -->
  21. <!-- close list gray bg -->
  22. <div class="tooltip_description" style="display:none" id="disp"> asdsadaasdsad </div>
  23. </div>
  24. </li>
  25.  
  26. </ul>

我有兴趣找到只是成功回调,当一个循环完成渲染。

这里是我的afterAdd函数,它基本上附加一些jquery事件,没有什么。

  1. myPostProcessingLogic = function(elements) {
  2. $(function(){
  3. $(".list_container_callog").hover(function(){
  4. $(".callsms_container",this).stop().animate({left:"0px"},{queue:false,duration:800});
  5. },function() {
  6. $(".callsms_container",this).stop().animate({left:"-98%"},duration:800});
  7.  
  8. });
  9. });
  10. }

感谢提前,告诉我有一个成功回调:)

解决方法

你在knockout.js中有afterRender回调函数
  1. foreach: { data: myItems,afterRender: renderedHandler }

Here’s documentation.

在处理程序内部检查呈现的集合的长度是否等于items集合的长度。如果不是不执行你想要使用的完整呈现的逻辑。

  1. renderedHandler: function (elements,data) {
  2. if ($('#containerId').children().length === this.myItems().length) {
  3. // Only now execute handler
  4. }
  5. }

猜你在找的jQuery相关文章