Ext常用开发基础知识
Ext常用开发基础知识
组件定义
//这种方法可以缓存所需要的组件 调用起来比较方便(方法一 )
Ext.define('MySecurity.view.home.HomePanel', {
//添加需要使用的组件
requires:[
'MySecurity.store.home.AuthorityStore'
],
//继承的组件
extend: 'Ext.panel.Panel',
layout:'fit',
//自定义一个xtype 供创建 或者起识别作用
xtype: 'homePanel',
//初始化方法
initComponent : function() {
var me = this;
//这里可以给me 赋值 例如组件 ,这样就可以使用 “homePanl.组件” 这样调用
me.items = [{
html:'hello'
}];
//这行代码记得添加上 否则创建失败
this.callParent(arguments);
}
});
//常用容器创建 Ext.container.Container (方法二)
this.container = Ext.create('Ext.container.Container',{
layout:{
type: 'vbox',
align : 'stretch'
},
items:[{
html:'hello'
}]
});
//增加组件(Item)
this.container.add({html:'add'})
Controller ViewModel 的使用
- 可以在UI上直接引用View Model的值
- 可以引用View Model 经过加工的function
- 可以使用ViewModel的值控制UI的表现
定义viewmodel
Ext.define('MySecurity.view.main.ViewportModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.mainviewport',
data: {
// 当前在那个 UI
currentView: null,
userAccess: null,
// 版本信息
appVersion: '0.0'
},
formulas: {
hideBottomContainer: function(get){
if(this.get('userAccess'))
return !(this.get('userAccess').username == 'admin');
else
return true;
}
}
});
定义Controller
Ext.define('MySecurity.view.ViewportController', {
extend: 'Ext.app.ViewController',
alias: 'controller.viewportcontroller',
init : function() {
this.control({
});
this.setData();
},
onLogoutBtnClick: function(){
var me = this;
Ext.MessageBox.confirm('Logout', 'Are you sure you would like to logout?', function(btn){
if (btn == 'yes') {
me.logout();
};
});
},
setData:function(){
var view = this.getView(),
vm = this.getViewModel();
vm.set('test', 'test');
console.log(vm.get('test'));
},
logout: function(){
var me = this,
vm = me.getViewModel();
Ext.Ajax.request({
url: '../../j_spring_security_logout',
method: 'POST',
success: function(response){
window.location.href = '../../';
},
failure: function() {
// Ext.MessageBox.alert(ALM.lblError, ALM.lblLogoutFailed+ALM.lblCheckNetworkHint);
window.location.href = '../../';
}
});
}
});
定义视图
Ext.define('MySecurity.view.Viewport', {
extend: 'Ext.container.Viewport',
requires:[
'MySecurity.view.main.MainHeader',
'MySecurity.view.main.MainTabPanel'
],
layout:{
type:'vbox',
align :'stretch'
},
controller: 'viewportcontroller',
viewModel: {
type: 'mainviewport'
},
items: [{
xtype:'mainHeader',
height:50
},{
xtype:'mainTabPanel',
flex:1
},{
xtype: 'tbtext',
cls: 'top-user-name',
bind: {
text: '{userAccess.username}',
hidden:'{hideBottomContainer}'
}
}]
});
Ajax的使用
//POST
Ext.Ajax.request({
url:'../controller/doSomething',
method:'POST',
headers: {
myHeaderType : 'Test'
},
jsonData: {
data:{
name:'Saber',
skill:'Excalibur'
}
},
failure: function(response, opts) {
console.log('failed')
},
success: function(response){
var text = response.responseText;
var result = Ext.JSON.decode(response.responseText);
if(result.success){
//do some thing
}else{
//do some thing
}
}
});
//GET
Ext.Ajax.request({
url:'../controller/doSomething',
method:'GET',
params: {
name:'saber',
skill:'Excalibur'
},
failure: function(response, opts) {
console.log('failed')
},
success: function(response){
var text = response.responseText;
var result = Ext.JSON.decode(response.responseText);
if(result.success){
//do some thing
}else{
//do some thing
}
}
});
自定义事件:
抛出事件
组件.fireEvent('事件名','事件源组件','param1','param2'......);
监听/处理 事件
组件.on('事件名','处理事件方法名', scope);
处理事件方法名:function(事件源组件,params1,params2){
}
事件处理
//1.使用 listeners
listeners: {
click: function() {
//do something
},
scope:me
}
//2.使用handler
handler:me.functionName,
scope:me
组件查询获取
up/down/query
用以获取以调用方法的组件为标准去寻找其他组件
Ext.dom.Element
up( selector, [limit], [returnDom] ) : HTMLElement/Ext.dom.Element
down( selector, [returnDom] ) : HTMLElement/Ext.dom.Element
selector:Ext.dom.Query
默认寻找xtype :
a.down('button') 寻找a元素下 xtype为button的第一个组件
query(selector) 返回所有符合的组件
//eg:
var btn = this.buttonContainer.down('[name="saveHero"]');
var myComponents = selfView.query('[action="test"]')
getComponent
用以获取自身的子组件
{
xtype: 'textarea',
itemId: 'comment-textarea'
}
var commentTextArea = this.getComponent('comment-textarea');
getCmp
用以获取指定id的组件
{
xtype: 'textarea',
id: 'my-textarea'
}
var commentTextArea = this.getComponent('my-textarea');
commentTextArea.setValue('asasa');
Ext.fly
返回一个指定的元素,其中包含component,dom,el
var a = Ext.fly(dom) 或 Ext.fly('domId')
a.component.setValue(3423);
Model
Ext.data.field.Field
- auto (Default, implies no conversion)
- string
- int
- number
- boolean
- date
设置主键
idProperty:'',
Store
读取数据
this.store.loadData(data);
this.store.load();
this.store.add(data);
添加参数
//1.
this.store.on('beforeload', this.onStoreBeforeload, this);
onStoreBeforeload: function(store){
store.proxy.extraParams = {
name:'Saber',
skill:'Excalibur'
};
return true;
},
//2.
this.store.load({
params: {
name: 'Saber',
skill: 'Excalibur'
}
});
获取数据
//获取所有数据
store.getRange()
store.getData()
//根据主键获取record
store.getById( id )
Ext常用开发基础知识的更多相关文章
- IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理
1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以“人”为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是整个IM系统都是以长 ...
- IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列
1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...
- [No0000138]软件开发基础知识
1. 本文目的 本文目的在于,介绍软件开发的各种基础知识 以实现,看了之后,对于软件开发的很多领域的基础知识有所了解 如此在进行后续的真正的软件开发时,遇到各种细节知识,才会明白由来和背景知识 第 1 ...
- IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token
本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...
- IM开发基础知识补课(七):主流移动端账号登录方式的原理及设计思路
1.引言 在即时通讯网经常能看到各种高大上的高并发.分布式.高性能架构设计方面的文章,平时大家参加的众多开发者大会,主题也都是各种高大上的话题——什么5G啦.AI人工智能啦.什么阿里双11分分钟多少万 ...
- 3D开发基础知识和简单示例
引言 现在物联网概念这么火,如果监控的信息能够实时在手机的客服端中以3D形式展示给我们,那种体验大家可以发挥自己的想象. 那生活中我们还有很多地方用到这些,如上图所示的Kinect 在医疗上的应用,当 ...
- IOS开发基础知识碎片-导航
1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...
- iOS开发——总结篇&IOS开发基础知识
IOS开发基础知识 1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id) 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断 ...
- Web开发基础知识
综述 最近开始Java Web方面的工作,千里之行始于足下,我们在开发过程中要善于总结自己遇到的问题.善于管理一些优秀的代码片段.本文的主要内容是Web开发的基础知识,对于大牛来说可以忽略,对于初入W ...
随机推荐
- java之 Timer 类的使用以及深入理解
最近一直在看线程知识,然后看到Timer定时器使用了线程实现的定时功能,于是了解了解: 本文 从Time类的使用和源码分析两个方面讲解: 1---Timer类使用 2---源码分析 1.Time类使用 ...
- Opencv在linux下安装
Opencv in Linux These steps have been tested for Ubuntu 10.04 but should work with other distros as ...
- Lua学习(5)——迭代器与泛型for
1. 迭代器 2. 泛型for语义 所谓迭代器就是一种可以遍历一种集合中所有元素的机制.在lua中,迭代器通常表示为函数,每调用依次函数就返回集合中的下一个元素.泛型for 内部保存了迭代器函数 实际 ...
- Android Weekly Notes Issue #258
Android Weekly Issue #258 May 21st, 2017 Android Weekly Issue #258 本期内容: 围绕着Google I/O的热潮, 本周的posts除 ...
- 实现分布式队列ZooKeeper的实现
一.背景 有一些时候,多个团队需要共同完成一个任务,比如,A团队将Hadoop集群计算的结果交给B团队继续计算,B完成了自己任务再交给C团队继续做.这就有点像业务系统的工作流一样,一环一环地传下去,直 ...
- Java经典编程题50道之一
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? public class Example01 { publi ...
- postgresql 多表联查
使用语句的先后顺序并不是优先级的排序: 连接分为:内连接和外连接,外连接分为左外连接,右外连接,全连接 概念上解释,表之间联合后数据如何整合. 返回的数据条数,可以通过集合求算.假如A集合有10条数据 ...
- HTTP权威指南-HTTP报文
在开始学习本章之前,先来提一些问题,什么是报文?如何创建报文?怎么去理解报文?以及报文的用处有哪些? 什么是报文? 可以这么去理解,如果说HTTP是因特网的信使,那么HTTP报文就是它用来搬东西的包裹 ...
- JavaScript面向对象轻松入门之抽象(demo by ES5、ES6、TypeScript)
抽象的概念 狭义的抽象,也就是代码里的抽象,就是把一些相关联的业务逻辑分离成属性和方法(行为),这些属性和方法就可以构成一个对象. 这种抽象是为了把难以理解的代码归纳成与现实世界关联的概念,比如小狗这 ...
- java音视频编解码问题:16/24/32位位音频byte[]转换为小端序short[],int[],以byte[]转short[]为例
前言:Java默认采用大端序存储方式,实际编码的音频数据是小端序,如果处理单8bit的音频当然不需要做转换,但是如果是16bit或者以上的就需要处理成小端序字节顺序. 注:大.小端序指的是字节的存储顺 ...