2011-10-28 26 views
1

我在向Request.HTML 函数中添加提示时遇到了一些问题。我有一个div,每30秒刷新一次它的内容。 返回的内容包含一系列名称为 “.liveReader”的div。未显示Request.HTML内容的mootools工具提示

这是我必须启动内容

  window.addEvent('domready', initLiveContent); 

      function initLiveContent() 
      { 
        var tips = new Tips('.liveReader'); 
        (function() { refreshPanel() }).periodical(30000); 
        refreshPanel(); 
      } 

      function refreshPanel() 
      { 
        var myRequest = new Request.HTML({ 
          url: '/inc/liveFeed.aspx', 
          update: $('liveContent'), 
          method: 'get', 
          onComplete: function() { 
           tips.attach('.liveReader'); 
          } 
        }); 
        myRequest.send(); 
      } 

的JS所以HTML是

<div id="liveContent"> 
    <div id="item1" class="liveReader" title="item 1"><p>Text 1</p></div> 
    <div id="item2" class="liveReader" title="item 2"><p>Text 2</p></div> 
</div> 

然而,所有我看到的是正常的工具提示标题!有任何想法吗?!!

回答

2

你的问题是变量作用域。

您的onComplete处理程序使用对tips的引用,而此变量对initLiveContent函数是本地的。因此,onComplete调用失败。

所以,第一个提示(没有双关语意):总是从一个实际的调试器开始,并将其设置为打破所有的异常。否则,由于错误(“未定义变量tips”)从回调中抛出,因此它不会出现在标准控制台中。

然后,两种方法来解决你的代码:

  1. tips共享变量。例如,您可能会将其声明为函数,该函数将成为您的window.addEvent调用的第二个参数,然后在initLiveContentonComplete回调中引用它。

  2. 更Mooish     :)   使用Element storage动态地从你的更新容器检索您Tips实例。那就是:

    function initLiveContent() 
    { 
        var tips = new Tips('.liveReader'); 
         // … your previous code … 
        $('liveContent').store('tip', tips);  
    } 
    
    function refreshPanel() 
    { 
        var destination = $('liveContent'); 
        var myRequest = new Request.HTML({ 
         update: destination, 
          // … your previous code … 
         onComplete: function() { 
          destination.retrieve('tip').attach('.liveReader'); 
         } 
        }); 
        myRequest.send(); 
    } 
    

:)

+0

真棒 - 它的工作一种享受 - 谢谢! –