2011-03-30 43 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();