有了这个工具,就可以很方便的构建一个从服务器端获取内容并将其附加到选择器中的jQuery plugin。
(function($) {
$.fn.fetch = function(url) { var queue = new Queue; this.each(function() { var el = this; queue.add(function(resp) { $(el).html(resp); }); }); $.ajax({ url: url, dataType: ''html'', success: function(html) { queue.flush(html); } }); return this; };
})(jQuery);
这样,我们就可以异步的获取内容,并继续我们的链式调用。
$("<div/>") .fetch(''/server/navigation.html'') .addClass(''column'') .appendTo(''#side'');
查看demo页看看效果。
如果一个队列中有很多项等待对服务器端的响应进行操作,该如何处置?作者构建了这样一个方法,值得参考:
function fetchTweet(url) { this.queue = new Queue; this.tweet = ""; var self = this; ajax(url, function(resp) { self.tweet = resp; self.queue.flush(this); }); } fetchTweet.prototype = { linkify: function() { this.queue.add(function(self) { self.tweet = self.tweet.replace(/\b@(\w{1,20}\b/g, ''$1''); }); return this; }, filterBadWords: function() { this.queue.add(function(self) { self.tweet = self.tweet.replace(/\b(fuck|shit|piss)\b/g, ""); }); return this; }, appendTo: function(selector) { this.queue.add(function(self) { $(self.tweet).appendTo(selector); }); return this; } }; |