2011-03-30 60 views
6

如何在回報Twitter widget時調用回調?Twitter小部件回調

使用他們提供的代碼:

TWTR.Widget({data: something}).render().setUser('me').start(); 

Twitter已經出了名的參差不齊的服務和頻繁的加載時間長。如何在加載TWTR小部件時添加回調,以便在此期間向用戶顯示加載程序?

回答

11

我不得不在Twitter上搜尋圖書館的作者,但是there is a ready callback: E.g.

new TWTR.Widget({ 
    id: 'twitter-feed', 
    version: 2, 
    . 
    . 
    . 
    features: {   
     scrollbar: false, 
     . 
     . 
    }, 
    ready: function() { 
    jQuery("div#twitter-load").remove(); 
    } 
}).render().setUser('me').start(); 
+0

雖然ready函數適用於我,但即使在小部件無法檢索任何推文的情況下(使用我的開發計算機上的主機文件更新進行api.twitter.com測試),它也會觸發它。 – 2012-05-03 01:04:14

1

該小部件有一個_rendered屬性。

我在jsfiddle上做了一個例子。請注意,沒有回調,您必須輪詢它以檢查它是否已經呈現。此外,創建它時必須將其分配給變量,以便您可以訪問_rendered屬性。

我通過jsbeautifying腳本找到了這個,所以它可能不是100%值得信賴的,絕對不支持。

+1

非常好的逆向工程。 – ash 2011-03-30 22:33:40

0

除了準備()回調和_rendered屬性(感謝jasie和harpyon),還有其他有用的,未記錄特性也的條帶。例如。結果(一個數組,result.length)和showsResults(另一個數組,result的子集)。

1

使用ash的「ready」函數發現,我需要添加一些輪詢,以便只在實際加載的任何推文中刪除加載消息。爲了驗證這一點,我將以下內容添加到我的hosts文件來模擬一個錯誤獲取的tweet:

127.0.0.1 api.twitter.com 

請注意,我的投票只能用200ms的間隔執行10次。這是因爲我不希望代碼在頭2秒內加載推文時無限次輪詢(如果它們要加載的話)。您可以調整這些值以適應您的情況。

function pollForTweets() { 
    if (jQuery("div#twitter-feed").find("div.twtr-tweet").length > 0) { 
     jQuery("div#twitter-load").remove(); 
     return; 
    } 

    pollForTweets.pollCounter = pollForTweets.pollCounter || 0; 
    if (pollForTweets.pollCounter < 10) { 
     pollForTweets.pollCounter++; 
     setTimeout('pollForTweets()', 200); 
    } 
} 

new TWTR.Widget({ 
    id: 'twitter-feed', 
    version: 2, 
    . 
    . 
    . 
    features: { 
     scrollbar: false, 
     loop: false, 
     live: false, 
     behavior: 'all' 
    }, 
    ready: function() { 
     pollForTweets(); 
    } 
}).render().setUser('twitter').start();