用于动态小部件更新的Twitter小部件方法

用于动态小部件更新的Twitter小部件方法,twitter,methods,widget,public-method,Twitter,Methods,Widget,Public Method,我正在尝试为twitter小部件的配置文件页面添加一个选项,我有一个字段,用户可以在其中添加他们的twitter帐户,下面显示了小部件的预览。如果我输入一个帐户并单击save(保存)并返回,它可以正常工作。但我要做的是使其动态化,当文本字段上发生模糊事件时,用相应的帐户刷新小部件 我有以下代码: var twitterWidget = new TWTR.Widget({ version: 2, type: 'profile', rpp: 4, interval: 6000,

我正在尝试为twitter小部件的配置文件页面添加一个选项,我有一个字段,用户可以在其中添加他们的twitter帐户,下面显示了小部件的预览。如果我输入一个帐户并单击save(保存)并返回,它可以正常工作。但我要做的是使其动态化,当文本字段上发生模糊事件时,用相应的帐户刷新小部件

我有以下代码:

var twitterWidget = new TWTR.Widget({
  version: 2,
  type: 'profile',
  rpp: 4,
  interval: 6000,
  width: 'auto',
  height: 300,
  theme: {
    shell: {
        background: '#cccccc',
        color: '#333333'
        },
    tweets: {
        background: '#ffffff',
        color: '#333333',
        links: '#0099cc'
        }
  },
  features: {
    scrollbar: false,
    loop: false,
    live: false,
    hashtags: true,
    timestamp: true,
    avatars: true,
    behavior: 'all'
  }
});
twitterWidget.setUser(twitterUser).render().start();

    $('#twitter_widget_id').change(function(){          
        twitterWidget.setUser($(this).val()).render().start();
    });
在这种情况下,它的工作原理是错误的:它只显示我输入的所有帐户的最新tweet,通常我得到的是一个空的小部件

如果我删除该对象并创建一个新对象,它会使页面变为空白,然后添加小部件

有没有人知道TWTR.Widget()的一些公共方法,比如re-render()之类的


谢谢。

有文档记录的Twitter小部件源代码可在上获得,阅读它将告诉您关于如何操纵其行为所需的一切。简单地说,小部件的工作原理如下:

当小部件第一次使用
new TWTR.widget
创建时,它调用
.init()
,并注意它嵌入页面的位置,将小部件HTML代码插入到该位置的DOM中。(它总是假设您正在嵌入,这就是为什么如果您在头脚本或窗口上下文中创建一个新的小部件,它最终会将自己嵌入到窗口的根中。)

但是,您仍然可以使用函数创建小部件(只要它是从嵌入式脚本调用的),然后保留对小部件的引用供以后使用。当您稍后调用
.render()
时,小部件将在任何地方重新呈现自身

TWTR对象上有一些伪私有方法,您可以尝试使用它们,例如
\u getwidgetml()
——它由
.render()
调用,但您不需要使用这些方法

我刚刚写了下面的代码,它对我来说很好。从嵌入的脚本调用此函数(如图所示),然后稍后使用新的搜索参数再次调用该函数以重新渲染它

<div id="my_widget_region">
  <script src="http://widgets.twimg.com/j/2/widget.js"></script>
  <script>do_twitter_widget('"#winning" or "justin bieber"');</script>
</div>

function do_twitter_widget(search_query, title, subtitle) {
  if (!window.widgetRef) {
    window.widgetRef = new TWTR.Widget({
      version: 2,
      type: 'search',
      search: search_query,
      interval: 6000,
      title: title || 'Tweets related to',
      subject: subtitle || search_query,
      width: 'auto',
      height: 500,
      theme: {
        shell: {
          background: '#8EC1DA',
          color: '#FFFFFF'
        },
        tweets: {
          background: '#FFFFFF',
          color: '#444444',
          links: '#1985B5'
        }
      },
      features: {
        scrollbar: false,
        loop: true,
        live: true,
        hashtags: true,
        timestamp: true,
        avatars: true,
        behavior: 'default'
      },
      ready: function() {
        // when done rendering...
      }
    });

    window.widgetRef
      .render()
      .start();
  }
  else {
    if (search_query != window.old_twitter_search) {
      window.widgetRef
        .stop()
        .setSearch(search_query)
        .setTitle(title || 'Tweets related to')
        .setCaption(subtitle || search_query)
        .render()
        .start();
    }
  }

  window.old_twitter_search = search_query;

  return window.widgetRef;
}

do_twitter_widget(“#获胜”或“贾斯汀·比伯”);
功能do_twitter_小部件(搜索、查询、标题、字幕){
如果(!window.widgetRef){
window.widgetRef=新的TWTR.Widget({
版本:2,
键入:“搜索”,
搜索:搜索查询,
间隔时间:6000,
标题:标题| |“与”相关的推文,
主题:副标题| |搜索|查询,
宽度:“自动”,
身高:500,
主题:{
外壳:{
背景:“#8EC1DA”,
颜色:“#FFFFFF”
},
推特:{
背景:“#FFFFFF”,
颜色:“#4444”,
链接:“#1985B5”
}
},
特点:{
滚动条:false,
循环:对,
现场直播:没错,
hashtags:true,
时间戳:对,
阿凡达:没错,
行为:“默认”
},
就绪:函数(){
//完成渲染后。。。
}
});
window.widgetRef
.render()
.start();
}
否则{
if(search\u query!=window.old\u twitter\u search){
window.widgetRef
.停止
.setSearch(搜索和查询)
.setTitle(标题| |与“”相关的推文)
.setCaption(副标题| |搜索|查询)
.render()
.start();
}
}
window.old\u twitter\u search=搜索\u查询;
返回window.widgetRef;
}

您可以通过使用“id”参数作为小部件元素的html id创建一个新实例来重新加载小部件

下面的例子。(对我来说很好)

爱死了#winning和Justin Bieber在这个答案中都被利用了道具++;
window.twitterCreateOrUpdateProfile = function (username) {

    var opts = {
        version: 2,
        type: 'profile',
        rpp: 4,
        interval: 30000,
        width: 298,
        height: 320,
        theme: {
            shell: {
              background: '#86b9d1',
              color: '#ffffff'
            },
            tweets: {
              background: '#ffffff',
              color: '#444444',
              links: '#0b0d0d'
            }
        },
        features: {
            scrollbar: true,
            loop: false,
            live: false,
            behavior: 'all'
        }
    };

    if (window.twitterCreateOrUpdateProfile.instance) {
        opts.id = window.twitterCreateOrUpdateProfile.instance.widgetEl.id;
    }
    window.twitterCreateOrUpdateProfile.instance = new TWTR.Widget(opts);
    window.twitterCreateOrUpdateProfile.instance.render().setUser(username).start();
}
window.twitterCreateOrUpdateProfile('evaisse');