tab_auto.js
Ext.ns("mars.view");
Ext.ns("mars.view.Tpl");
Ext.ns("mars.view.XTpl");
/*Models*/
Ext.regModel('Emp', {
fields: [
{name: 'deptno', type: 'integer'},
{name: 'empName', type: 'string'},
{name: 'empno', type: 'string'}
]
});
/*Common List*/
mars.view.List = (function(listId,model,url,sorters,itemTpl){
var _self;
return _self = {
id: model+listId,
xtype: 'list',
width: '100%',
height: '100%',
store : new Ext.data.Store({
model : model,
proxy: {
type: 'ajax',
url : url,
reader: {
type: 'json',
root: model
}
},
autoLoad: true,
sorters : sorters,
getGroupString : function(record) {
return record.get(sorters)[0];
}
}),
itemTpl: itemTpl,
listeners: {
itemtap: function(list, index, item, e) {
var store = list.getStore(),
host = store.getAt(index);
Ext.Msg.alert(host.get(sorters));
}
}
};
});
/*Templetes*/
mars.view.Tpl.One=
'<div class="contact">'
+'<div style="font-size:11pt;float:left;">'
+'<div style="margin:0.5em 0.5em 0.5em;"><span style="color:red;">{empName}</span></div>'
+'</div>'
+'</div>';
mars.view.XTpl.Two=new Ext.XTemplate([
'<div class="demo-weather" style="font-size:12px;">' + '<tpl for=".">'
+ '<div class="day">'
+ '<div class="temp">{deptno}</div>',
'<span class="temp">{empName}</span>',
'<span class="temp">{empno}</span></div></tpl></div>'
]);
/*TabPanel*/
mars.view.Tab = (function(){
var _self;
return _self = Ext.extend(Ext.TabPanel, {
id: '',
fullscreen: true,
ui : 'dark',
items: [{id: 'spacerTemp',xtype: 'button'}],//initial a temp component to make the tab style normal.
/*---User-defined Attributes---*/
count: 1,
url: '',
/*-----------------------------*/
constructor: function(tabId,url){
this.id = tabId;
this.url = url;
_self.superclass.constructor.call(this);
},
initComponent: function(){
_self.superclass.initComponent.call(this);
this.tabBar.scroll='horizontal';
},
listeners: {
added: function(){
var tabId = this.id;
var url = this.url;
Ext.Ajax.request({
url: url,
success: function(response, opts) {
Ext.getCmp(tabId).remove(Ext.getCmp('spacerTemp'));//remove the temp tab
Ext.getCmp(tabId).add(eval('('+response.responseText+')'));
Ext.getCmp(tabId).setActiveItem(0);//set the active item via index
Ext.getCmp(tabId).doLayout();
}
});
},
cardswitch: function(obj, newCard, oldCard, index, animated){
try{
if(this.count>1){
newCard.remove(Ext.getCmp(this.model+newCard.id));
this.addDynamicItems(obj, newCard, oldCard, index, animated);
}else{
this.addDynamicItems(obj, newCard, oldCard, index, animated);
}
newCard.doLayout();
this.count++;
}catch(Exception){
void(0);
}
}
},
addDynamicItems: function(obj, newCard, oldCard, index, animated){
switch(index){
case 0:
var url = '../base/fetchEmp.do?deptno='+newCard.id;
newCard.add(mars.view.List(newCard.id,'Emp',url,'deptno',mars.view.Tpl.One));
break;
case 1:
var url = '../base/fetchEmpTest.do?deptno='+newCard.id;
newCard.add(new mars.view.Panel('autoPanel',url,mars.view.XTpl.Two));
break;
}
}
});
})();
/*Panel*/
mars.view.Panel = (function(){
var _self;
return _self = Ext.extend(Ext.Panel, {
id: '',
scroll: 'vertical',
fullscreen: true,
/*---User-defined Attributes---*/
url: '',
xtpl: '',
/*-----------------------------*/
constructor: function(id,url,xtpl){
this.id = id;
this.url = url;
this.xtpl = xtpl;
_self.superclass.constructor.call(this);
},
initComponent: function(){
_self.superclass.initComponent.call(this);
this.listeners = {
added: this.loadRecord
};
},
items: [{
xtype: 'panel',
scroll: 'vertical'
}],
loadRecord: function() {
var pnl = this.items.get(0);
var xtpl = this.xtpl;
Ext.Ajax.request({
url: this.url,
success: function(response, opts) {
xtpl.overwrite(pnl.body, eval('('+response.responseText+')'));
}
});
}
});
})();
[align=center][/align]
tab_auto.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
<title>Form</title>
<link rel="stylesheet" type="text/css" href="../lib/touch/resources/css/sencha-touch.css">
<script type="text/javascript" src="../lib/touch/sencha-touch.js"></script>
<script type="text/javascript" src="../lib/touch/sencha-touch-debug.js"></script>
<script type="text/javascript" src="testPanel.js"></script>
<script type="text/javascript" src="tab_auto.js"></script>
<style type="text/css" media="screen">
.day {
float: left;
background-color: #c5c5c5;
color: rgba(0,0,0,.5);
text-shadow: #fff 0 1px 0;
margin: 1%;
width: 18%;
text-align: center;
-webkit-border-radius: 15px;
border-bottom: 1px solid #999;
padding: 15px;
}
.x-phone .day {
float: none;
width: 98%;
padding: 10px;
}
.day img {
display: block;
margin: 0 auto;
}
.temp {
display: block;
margin: 20px 0;
font-size: 48px;
line-height: 40px;
}
.day .temp_low {
display: inline;
}
.temp_low {
display: block;
font-size: 26px;
color: rgba(30,30,30,.5);
}
.date {
margin: 10px 0 5px;
font-size: 11px;
font-weight: bold;
}
.demos-loading {
background: rgba(0,0,0,.3) url(../resources/shared/loading.gif) center center no-repeat;
display: block;
width: 10em;
height: 10em;
position: absolute;
top: 50%;
left: 50%;
margin-left: -5em;
margin-top: -5em;
-webkit-border-radius: .5em;
color: #fff;
text-shadow: #000 0 1px 1px;
text-align: center;
padding-top: 8em;
font-weight: bold;
}
</style>
<script type="text/javascript">
<!--
new Ext.Application({
launch: function(){
this.viewport = new Ext.Panel({
id: 'mp',
fullscreen: true,
layout: 'vbox',
items: [{
xtype: 'button',
ui: 'round',
text: 'test',
handler: function(){
//Ext.getCmp('mp').add(new mars.view.TestPanel());
//Ext.getCmp('mp').doLayout();
Ext.getCmp('mp').add(new mars.view.Tab('autoTab','../base/fetchDept.do'));
Ext.getCmp('mp').doLayout();
}
}]
});
}
});
//-->
</script>
</head>
<body>
<textarea id="dept" class="x-hidden-display">
<tpl for=".">
<div>
<div>{deptno}</div>
<span >{deptName}°</span>
</div>
</tpl>
</textarea>
</body>
</html>
分享到:
相关推荐
通过学习和理解这些代码,你可以更好地掌握如何在实际项目中应用动态加载策略,提升Sencha Touch应用的性能和用户体验。 总之,Sencha Touch的动态加载组件技术对于优化移动应用性能至关重要。通过合理地运用上述...
《SenchaTouch权威指南》同书源代码 本代码清单内包括本书全部资源文件与全部代码文件,其中内容如下所示: 1.第一章至第十四章下各子文件夹,以及第十五章的15-1、15-2、15-3子文件夹中均包含开发阶段使用的index-...
SenchaTouch权威指南的代码示例,在本机亲自测试通过,是学习的好材料
接下来,关于解压后的“touch-docs-2.2.1”文件夹,它是Sencha Touch的文档资源,包含以下部分: 1. **API文档**:详尽的类、方法、事件和配置项说明,帮助开发者了解每个组件和函数的具体用法。 2. **示例代码**...
9. **app**:这个文件夹可能是应用的源代码结构,按照Sencha Touch的约定,可能包含`views`、`models`、`stores`、`controllers`等子文件夹,分别存放对应类型的源代码。 通过以上分析,我们可以看出这个压缩包提供...
SenchaTouch权威指南》代码清单
本文通过对 Sencha Touch 框架的介绍,使读者对该框架有一定的了解,并通过一些代码示例给用户更详细直观的对 Sencha Touch 框架功能的了解。 ExtJS ExtJS 是为 web 开发人员提供的基于 JavaScript 和 web 标准快速...
《Sencha Touch in Action》是一本关于使用Sencha Touch进行跨平台移动开发的书籍,它详细介绍了Sencha Touch框架的使用方法和技巧。Sencha Touch是一个利用HTML5、CSS3和JavaScript创建移动Web应用程序的框架,它是...
8. **模板与渲染**:Sencha Touch支持使用模板(Template)来动态生成HTML,这在创建复杂视图时非常有用,例如在列表中显示城市信息。 9. **路由与导航**:如果项目涉及多页面或组件间的导航,那么可能使用到了路由...
List组件是Sencha Touch中用于展示数据的视图,常用于创建诸如联系人列表、新闻摘要列表等。它可以与数据存储(Store)配合使用,实时更新显示的数据。List组件提供了多种样式和配置选项,如分组、多选、索引条等,...
4. **Sencha CMD** - 安装Sencha CMD,它是Sencha Touch开发的核心工具,提供了一系列自动化命令,如创建项目、生成组件、编译代码等。可以通过Sencha官网下载并按照指导进行安装。 接下来,我们将按照以下步骤搭建...
1. **代码智能感知**:集成Sencha Touch的API文档,为开发者提供实时的代码提示,包括类、方法、属性等。 2. **语法高亮**:对Sencha Touch的JavaScript语法进行特殊标记,使代码更易读。 3. **模板和snippet**:...
Sencha Touch 是一款专为移动设备设计的JavaScript框架,它提供了丰富的组件库和强大的数据管理功能,用于构建高性能的触控应用。"sencha touch 登陆界面"这个主题,主要涉及的是如何使用Sencha Touch来设计和实现一...
- **app.js**:这是Sencha Touch应用的主要入口文件,通常包含应用的配置和初始化代码。 - **views**目录:存放视图组件的代码,这些组件可能包括各种屏幕或控件,如主页、详情页、设置页等。 - **models**目录:...
10. **文档和示例**:Sencha Touch通常会提供详尽的文档和丰富的示例代码,帮助开发者快速上手和深入学习。 在"touch-2.4.0"这个压缩包文件中,包含了Sencha Touch 2.4.0的完整源码和相关资源,包括库文件、样例、...
Sencha Touch SDK工具是开发移动应用的重要资源,尤其对于那些希望使用Sencha Touch框架构建触控友好、跨平台Web应用程序的开发者来说。Sencha Touch是一个强大的JavaScript库,它提供了丰富的UI组件和API,使得...
内含《SenchaTouch权威指南》源代码 及多个senchatouch + phonegap实例代码
FusionCharts 提供了一些内置方法来调整图表大小,但可能需要根据Sencha Touch 的布局规则进行额外的样式调整。 6. **事件监听**:FusionCharts 支持多种交互事件,如点击图表、图例等。你可以结合Sencha Touch 的...