2011-10-28 56 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

真棒 - 它的工作一種享受 - 謝謝! –