2012-08-09 50 views
0

我们首先做代码:修改DOM后如何确保DOM已准备好再次

$(function(){ 

    //Step-2) Load and a template from server and APPEND to BODY 
    function loadTemplate(path, callback) { 
     $.get(path, null, function (t) { 
      $('body').append(t); 
     }, 'text'); 

     if (callback != undefined && typeof (callback) == 'function') { 
      callback.apply(window); 
     } 
    } 

    //Step-3) a callback method 
    function showProduct() { 
     //setTimeout(function() { 
     // $('#prodBasicView').tmpl(prod).appendTo('#prodView'); 
     //}, 100); 

     alert($('#prodBasicView').length); // it alerts 0, But I am expecting 1 

    } 

    //Step-1) initiating loading template 
    loadTemplate('/template/remote-template2.htm', showProduct); 
}); 

远程template2.htm: -

 <div id="prodBasicView" style="display:none;"> 
     <div class="myProd"> 
     <h3> Product Name</h3> 
      <span>Price: $ 700 </span> 
     </div> 
    </div> 

问题:

  • loadTemplate方法成功加载模板(remote-template2.htm)并追加到body。
  • 成功加载模板后,传递回调函数showProduct方法被解雇。
  • Inside showProduct method我试图使用加载的模板($('#prodBasicView')),但它返回空数组。
  • 但如果我耽误显示产品很少毫秒的执行它的工作原理,但我不认为这是一个很好的做法
  • 上述观点似乎是追加的DOM元素都没有准备好

  • 如何在使用前修改DOM/MANIPULATED DOM?

回答

1

在我看来,你只是需要把回调调用代码$.get回调中,像这样:

function loadTemplate(path, callback) { 
    $.get(path, null, function (t) { 
     $('body').append(t); 
     if (callback != undefined && typeof (callback) == 'function') { 
      callback.apply(window); 
     } 
    }, 'text'); 
} 
+0

是回调从'$ .get'回调使用JavaScript的应用** **方法 – 2012-08-09 05:16:47

+0

@LPremchandra调用:我怕我不明白您的评论。我提供的代码有问题吗?在你原来的代码中,'if(callback!='...行在$ .get'函数的回调之外;通过将它放在里面,我确保它不会被调用,直到回调函数完成(也就是说,在'$('body')。append(t);'call)之后。 – KRyan 2012-08-09 05:19:39

+0

:) Thanks Dragoon Wraith。我在想,我的回调是在'$ .get'回调中。这是我的代码中的错误,但理解是正确的。 **非常感谢** – 2012-08-09 05:26:04

1

执行您callback在AJAX回调处理程序。 (因为Ajax的工作原理异步

function loadTemplate(path, callback) { 
     $.get(path, null, function (t) { 
      $('body').append(t); 
      if (callback != undefined && typeof (callback) == 'function') { 
       callback.apply(window); 
      } 
     }, 'text'); 
    } 
+0

我的实际回调方法** showProduct **正在通过将其传递到** loadTemplate **方法中,从ajax回调处理程序中调用 – 2012-08-09 05:19:21

+0

@LPremchandra是吗?检查代码,看看有什么不同? – xdazz 2012-08-09 05:22:23

+0

我的代码中有一个错误。感谢它应该在Ajax回调 – 2012-08-09 05:27:04