用AJAX获取内容有一点要考虑的是尽量不要重复的到服务器端获取同一内容,这段代码就对此做了处理,数据在得到之后,就不会再到服务器端获取。在示例中可以看到,当四个选项全点击之后,页面上方的提示就不会改变了。
由于AjaxTabs类继承自Tabs类,因此它也拥有了Tabs类的所有功能。
为什么这次不继续采用implement方法来完成,因为AjaxTabs类拥有一个与Tabs类的同名方法:showSection,而这个方法在给Tabs类添加动画效果时覆盖(override)过,如果再次使用implement方法话,又将覆盖(override)视觉效果中的方法。因此采用继承的方式将更好的完成功能需求。
AjaxTabs 继承 Tabs
AjaxTabs.js


1 var AjaxTabs = new Class({
2
3 Extends:Tabs,
4
5 options:{
6 cache:true,
7 urls:[],
8 requestOptions:{}
9 },
10
11 showSection:function(index, force){
12 var tab = this.tabs[index];
13 var url = this.options.urls[index] || (tab.getElement('a')? tab.getElement('a').get('href'):false);
14 if(!url || force || (this.options.cache && tab.retrieve('loaded'))) {
15 this.parent(index);
16 } else {
17 this.getSectionContent(index, url);
18 }
19 },
20
21 getSectionContent:function(index, url){
22 var tab = this.tabs[index];
23 var section = this.sections[index];
24 var request = tab.retrieve('tabAjax');
25 if(!request) {
26 request = new Request.HTML(
27 $merge(this.options.requestOptions,{
28 method:'get',
29 update:section,
30 url:url
31 })
32 ).addEvent('onSuccess',function(){
33 this.showSection(index,true);
34 tab.store('loaded',true);
35 }.bind(this));
36 tab.store('tabAjax',request);
37 }
38 request.send();
39 }
40 });