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 ...
随机推荐
- Jquery datatable 动态隐藏列(根据有无值)
一场景: 前端利用datatable初始化的时候会向后端调用数据,需求是 要动态的使某一列根据传回来的一个标志位是否有值来决定显示与否 这是当前传回值有活动优惠幅度的情况下 这是没有活动优惠的情况下 ...
- MyBatis之简单了解Plugin
MyBatis的Configuration配置中有一个Plugin配置,根据其名可以解释为"插件",这个插件实质可以理解为"拦截器"."拦截器&quo ...
- 《Android进阶》之第一篇 在Java中调用C库函数
在Java代码中通过JNI调用C函数的步骤如下: 第一步:编写Java代码 class HelloJNI{ native void printHello(); native void printStr ...
- elasticsearch 2.0+ 安装 Marvel
Marvel 2.0+ Compatible with the latest versions of Elasticsearch and Kibana Step 1: Install Marvel i ...
- 【web前端开发】浏览器兼容性处理
1.居中问题div里的内容,IE默认为居中,而FF默认为左对齐,可以尝试增加代码margin: 0 auto;2.高度问题两上下排列或嵌套的div,上面的div设置高度(height),如果div里的 ...
- Docker - docker machine
前言 之前在使用docker的时候,对于docker-machine的理解有一些误解(之前一直以为docker-machine和docker-engine等价的,只不过是在window或者mac平台上 ...
- python标准库]Hashlib
hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法. 在学习hashlib模块之前,先来看 ...
- nodejs 路径
在学习的时候遇到了 一些路劲方面的疑惑 便查询了一些 module.filename:开发期间,该行代码所在的文件.__filename:始终等于 module.filename.__dirname: ...
- c++ thread
Either pthread_join(3) or pthread_detach() should be called for each thread,that an application crea ...
- android 模拟器对应键盘快捷键
一位同事的总结资料: Android SDK2.0.1自带的虚拟机尺寸都比较小(不针对机型,只为了在PC上看的舒服一点,当然越大越好了,我最大设置成1050*450,但是自带的屏保会不够宽,900*4 ...