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