通过将tweetSweep
函数内部包装在回调函数中(下面的代码片段),我能够解决此问题。
这行得通,但我很想听听是否有其他可用的方法。
// URL Constructor ---------- //
tweetSweep: function() {
this.getShortUrl(function(short) {
for(var i = 0; i < s.tweets.length; i++) {
var tweet = $(s.tweets[i]);
var tweet_text = $(tweet).text();
// Build the URL
$(tweet).attr({
href: s.tweet_url + tweet_text + ' ' + short + s.tweet_source,
target: '_blank'
});
}
});
},
// URL Shortening via Bitly API ---------- //
getShortUrl: function(callback) {
var accessToken = s.bitly_key;
var url = 'https://api-ssl.bitly.com/v3/shorten?access_token=' + accessToken + '&longUrl=' + s.post_url;
$.getJSON(url, function(response) {
callback(response.data.url);
});
}
我正在研究一个小的“ Tweet This”插件,它将使用包裹在a
类中的元素包装任何文本,.tweet-embed
并通过bit.ly API构建带有句子和当前页面的缩短URL的Twitter链接。
我正在getShortURL
通过init
函数调用函数,并且试图将其结果附加到tweetSweep
函数中链接的href属性中(通过shorturl
变量,该变量当前未定义...第39行):
(function() {
/**
* Main TweetEmbed object with settings
* and helper functions to build "Tweet this"
* links around desired text.
*
* @type {Object}
*/
var TweetEmbed = {
// Settings ---------- //
settings: {
tweets: $('.tweet-embed'),
tweet_url: 'http://twitter.com/home/?status=',
tweet_source: ' — @handle',
post_url: window.location.href,
bitly_login: 'my_login_is_here',
bitly_key: 'my_key_is_here'
},
// Initialization ---------- //
init: function() {
s = this.settings;
this.tweetSweep();
this.getShortUrl(s.post_url);
},
// URL Constructor ---------- //
tweetSweep: function() {
for(var i = 0; i < s.tweets.length; i++) {
var tweet = $(s.tweets[i]);
var tweet_text = $(tweet).text();
// Build the URL
$(tweet).attr({
//href: s.tweet_url + tweet_text + s.tweet_source + shorturl,
href: s.tweet_url + tweet_text + s.tweet_source,
target: '_blank'
});
}
},
// URL Shortening via Bitly API ---------- //
getShortUrl: function(url, callback) {
var accessToken = s.bitly_key;
var url = 'https://api-ssl.bitly.com/v3/shorten?access_token=' + accessToken + '&longUrl=' + encodeURIComponent(url);
$.getJSON(url, function(response) {
short = response.data.url;
});
}
}; // end TweetEmbed
// Fire off TweetEmbed's initialization
TweetEmbed.init();
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="tweet-embed">Test tweet here</a>
调用getShortUrl();
函数时,如果short
在控制台中键入,它将按预期吐出缩短的URL。我的问题是我无法弄清楚如何在插件的其他任何地方使用该响应(我试图将其保存到shorturl
变量中却init
无济于事)...
我一遍又一遍地搜索,发现了大量类似问题的建议,但是仍然无法弄清楚如何将其应用于我的代码。对于异步和回调爵士乐,我一无所知。
tweetSweet
可以接受可选shorturl
参数,默认为空字符串。然后,在$.getJSON
回调中,您可以调用,tweetSweep
以使用API的响应来更新所有URL。
(function() {
/**
* Main TweetEmbed object with settings
* and helper functions to build "Tweet this"
* links around desired text.
*
* @type {Object}
*/
var TweetEmbed = {
// Settings ---------- //
settings: {
tweets: $('.tweet-embed'),
tweet_url: 'http://twitter.com/home/?status=',
tweet_source: ' — @handle',
post_url: window.location.href,
bitly_login: 'my_login_is_here',
bitly_key: 'my_key_is_here'
},
// Initialization ---------- //
init: function() {
s = this.settings;
this.tweetSweep();
this.getShortUrl(s.post_url);
},
// URL Constructor ---------- //
tweetSweep: function(shorturl) {
if (!shorturl) {
shorturl = '';
}
for (var i = 0; i < s.tweets.length; i++) {
var tweet = $(s.tweets[i]);
var tweet_text = $(tweet).text();
// Build the URL
$(tweet).attr({
href: s.tweet_url + tweet_text + s.tweet_source + shorturl,
target: '_blank'
});
}
},
// URL Shortening via Bitly API ---------- //
getShortUrl: function(url) {
var accessToken = s.bitly_key;
var url = 'https://api-ssl.bitly.com/v3/shorten?access_token=' + accessToken + '&longUrl=' + encodeURIComponent(url);
var self = this;
$.getJSON(url, function(response) {
var short = response.data.url;
self.tweetSweep(short);
});
}
}; // end TweetEmbed
// Fire off TweetEmbed's initialization
TweetEmbed.init();
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="tweet-embed">Test tweet here</a>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句