ExtJS依赖JavaScript,JavaScript推荐两本书:《JavaScript高级程序设计》初阶阶段, 《JavaScript设计模式》中级阶段

fun1();//会调用fun1()方法 因为:function语句定义的形式,JavaScript解析器直接去找,先执行完成function定义的方法,其余代码从上到下按照顺序执行

function fun1() // 先 执行 function定义的方法
{ } var fun2 = function( x )
{
return x;
} var fun3 = new Function('x','y','return x+y');
alert( fun3(20,30) );//显示 50 =========== arguments ================
function test( x,y,z )
{
alert( arguments.length);//返回 3(有两个参数)
alert( arguments[2]);//显示 3(第2个参数)
}
test(1,2,3); ==============================

  

给Eclipse安装Spket的插件:

eclipse编写ExtJS有提示功能需要:sdk.jsb3文件:该文件在解压目录 build目录下:

==========================================

========================================================================================================

需要导入的extjs的文件:

=======================================================================================

/**
* Ext.onReady 必须的准备函数 类似于 window.onload,但是加载时机跟靠前
*/
Ext.onReady(function(){
// Ext 在这个方法里写
Ext.MessageBox.alert('提示信息','hello world');
});

  

===================== Ext 的文档查看方式  ===============

-------------------------------------------------------------------------------------------

================================= window 组件 ====================================================

Ext.window.Window

configs:
constrain:布尔值,true为限制窗口只能在其容器内移动,默认值为false,允许窗口在任何位置移动。(另:constrianHeader属性)
modal:布尔值,true为设置模态窗口。默认为false
plain:布尔值,true为窗口设置透明背景。false则为正常背景,默认为false
x、y :设置窗口左上角坐标位置。
onEsc:复写onEsc函数,默认情况下按Esc键会关闭窗口。
closeAction:string值,默认值为'destroy',可以设置'hide'关闭时隐藏窗口
autoScroll:布尔值,是否需要滚动条,默认false

html:String值

icon:String值(图片路径)

iconCls:String值(CSS的样式)

例如:

Ext.onReady(function(){

	//Ext.create方法相当于创建一个实例对象
Ext.create('Ext.window.Window',{
title:'我的第一个组件,window' ,
width:400 , //Number型 也可以是字符串类型 width: '90%'
height:300 ,
layout:'fit' ,
constrain:true , //限制窗口不超出浏览器边界
modal:true , //设置一个模态窗口
//plain:true ,
icon:'js/extjs/icons/used/browser_window.png', //字符串参数,图片的路径
//iconCls:'' , //CSS样式
x:50 ,
y:50 ,
autoScroll:true, //添加滚动条
html:'<div style=width:200px;height:200px>我是一个div</div><div style=width:200px;height:200px>我是第二个div</div>' ,
//constrainHeader:true, //不允许该窗口的title超出浏览器边界
renderTo:Ext.getBody() //新创建的组件 渲染到什么位置
}).show(); });

  

 点击一个按钮 ,打开一个新的窗体 window重复创建的问题

Ext.onReady(function(){

	//ex001:点击一个按钮 ,打开一个新的窗体 window重复创建的问题
//第一种实现
//JQuery code: var btn = $('#btn'); var dombtn = btn.get(0);
var btn = Ext.get('btn'); //这个元素是经过Ext包装的一个Ext的Dom对象//alert(btn.dom.value);
btn.on('click',function(){
if(!Ext.getCmp('mywin')){
Ext.create('Ext.window.Window',{
id:'mywin' , //如果你给组件加了一个id 那么这个组件就会被Ext所管理
title:'新窗体' ,
height:300 ,
width:400 ,
renderTo:Ext.getBody() //,
//modal:true 使窗口模态窗口
}).show();
}
}); //第二种实现
// var win = Ext.create('Ext.window.Window',{
// title:'新窗体' ,
// height:300 ,
// width:400 ,
// renderTo:Ext.getBody() ,
// closeAction:'hide' //closeAction默认是destroy
// });
//
// Ext.get('btn').on('click',function(){
// win.show();
// }); });

  

在组件中添加子组件  ,并进行一系列针对于组件的操作

Ext.onReady(function(){

	//ex002 : 在组件中添加子组件  ,并进行一系列针对于组件的操作

	//在组件中添加子组件:
// var win = new Ext.window.Window({
// title:"添加子组件实例" ,
// width:'40%' ,
// height:400 ,
// renderTo:Ext.getBody() ,
// draggable:false , //不允许拖拽
// resizable:false , //不允许改变窗口大小
// closable:false, //不显示关闭按钮
// collapsible:true , //显示折叠按钮
// bodyStyle: 'background:#ffc; padding:10px;' , // 设置样式
// html:'我是window的内容!!' ,
// //Ext items(array) 配置子组件的配置项
// items:[{
// //Ext的组件 给我们提供了一个简单的写法 xtype属性去创建组件
// xtype:'panel',
// width:'50%',
// height:100 ,
// html:'我是面板'
// },
// new Ext.button.Button({
// text:'我是按钮' ,
// handler:function(){
// alert('执行!!');
// }
// })
//// {
//// xtype:'button' ,
//// text:'我是按钮',
//// handler:function(btn){
//// alert('我被点击了');
//// alert(btn.text);
//// }
//// }
// ]
//
// });
// win.show(); var win = new Ext.Window({
id:'mywin' ,
title:'操作组件的形式' ,
width:500 ,
height:300 ,
renderTo:Ext.getBody() ,
//表示在当前组件的top位置添加一个工具条
tbar:[{ //bbar(bottom) lbar(leftbar) rbar(rightbar) fbar(footbar)
text:'按钮1' ,
handler:function(btn){
//组件都会有 up、down 这两个方法(表示向上、或者向下查找) 需要的参数是组件的xtype或者是选择器
alert(btn.up('window').title);
}
},{
text:'按钮2' ,
handler:function(btn){
//最常用的方式
alert(Ext.getCmp('mywin').title);
}
},{
text:'按钮3' ,
handler:function(btn){
//以上一级组件的形式去查找 OwnerCt
//console.info(btn.ownerCt);
alert(btn.ownerCt.ownerCt.title);
}
}]
});
win.show(); });

  

 用windowGroup(Ext.ZidexManager)对象去操作多个window窗口

Ext.onReady(function(){

	//ex003:用windowGroup对象去操作多个window窗口
var wingroup = new Ext.WindowGroup();
for(var i = 1 ; i <=5;i++){
var win = Ext.create('Ext.Window',{
title:'第' + i + '个窗口' ,
id:'win_' + i ,
width:300 ,
height:300 ,
renderTo:Ext.getBody()
});
win.show();
wingroup.register(win); //把窗体对象注册给ZindexManger
} var btn1 = Ext.create('Ext.button.Button',{
text:'全部隐藏' ,
renderTo:Ext.getBody(),
handler:function(){
wingroup.hideAll(); //隐藏所有被管理起来的window组件
}
}); var btn2 = new Ext.button.Button({
text:'全部显示' ,
renderTo:Ext.getBody(),
handler:function(){
wingroup.each(function(cmp){
cmp.show();
});
}
}); var btn3 = new Ext.button.Button({
text:'把第三个窗口显示在最前端' ,
renderTo:Ext.getBody(),
handler:function(){
wingroup.bringToFront('win_3'); //把当前的组件显示到最前端
}
}); var btn4 = new Ext.button.Button({
text:'把第五个窗口显示在最末端' ,
renderTo:Ext.getBody(),
handler:function(){
wingroup.sendToBack('win_5'); //把当前的组件显示到最后
}
}); });

  

config、constructor

Ext.onReady(function(){

	//第12讲:config、constructor
/*
//在Ext中如何去定义一个类: Ext.define(className , properties , callback)
Ext.define('Person',{
//这里是对于这个类的一些配置信息
//config属性 就是配置当前类的属性内容,并且会加上get和set方法
config:{
name:'z3' ,
age: 20
},
//自己定义的方法
say:function(){
alert('我是方法...');
},
//给当前定义的类加一个构造器 ,目的就是为了初始化信息
constructor:function(config){
var me = this ;
// for(var attr in config){
// alert(attr + " : " + config[attr]);
// }
me.initConfig(config); // 真正的初始化传递进来的参数
}
}); //Ext.create 实例化一个对象
var p = Ext.create('Person',{
name:'王五' ,
age:30
});
alert(p.getName());
alert(p.getAge());
p.say();
*/ //第13讲:extend //Ext的继承代码
/**
//Sup Class
Ext.define('Person',{
config:{
name:'bjsxt'
} ,
constructor:function(config){
var me = this ;
me.initConfig(config);
}
});
//Sub Class
Ext.define('Boy',{
//使用Ext的继承
extend:'Person',
config:{
sex:'男',
age:20
}
});
var b = Ext.create('Boy',{
name:'张三',
age:25
});
alert(b.name);
alert(b.sex);
alert(b.age); */ //javascript : prototype(原型) :所有类的实例对象所共享
/** function Person(name){
this.name = name;
//this.sayName = sayName ;
};
// function sayName(){
// alert(this.name);
// };
Person.prototype.sayName = function(){
alert(this.name);
}; var p1 = new Person('张三');
p1.sayName();
var p2 = new Person('李四');
p2.sayName();
alert(p1.sayName == p2.sayName); */ //javascript : prototype(原型) :实现继承
/** //SupClass
var Person = function(name){
this.name = name;
};
//alert(Person.prototype.constructor); //原型对象的构造器,默认是当前的类的模板
//SupClass prototype object
Person.prototype = {
constructor:Person ,
id:100
}; //SubClass
var Boy = function(name,sex,age){
//借用构造函数继承的方式
Person.call(this,name);
this.sex = sex ;
this.age = age ;
}; //实现原型继承: 继承了父类的模板和父类的原型对象
//Boy.prototype = new Person();
//自己实现extend的方法
function myextend(sub , sup){
var F = function() {}, //定义一个空函数做为中转函数
subclassProto, //子类的原型对象
superclassProto = sup.prototype; //把父类的原型对象 交给了superclassProto变量 F.prototype = superclassProto; // 做中转的位置:把父类的原型对象 赋值给了 F这个空函数的原型对象
subclassProto = sub.prototype = new F(); //进行原型继承
subclassProto.constructor = sub; //还原构造器
sub.superclass = superclassProto; //做了一个保存,保存了父类的原型对象
//目的是为了防止你大意了
if (superclassProto.constructor === Object.prototype.constructor) {
superclassProto.constructor = sup;
}
};
myextend(Boy ,Person);
var b = new Boy('李四','男',25);
alert(b.name);
alert(b.sex);
alert(b.id); */ //第14讲:Ext.define 其他配置项 //别名、备用名
/**
Ext.define("User",{
config:{
name:'bjsxt111' ,
age:100
},
alias:'uu' ,//起别名 底层代码在Ext.ClassManger
alternateClassName:'uuu', //给当前类一个备用名 底层代码在Ext.ClassManger
constructor:function(config){
var me = this;
me.initConfig(config);
}
}); var u = Ext.create('uuu');
alert(u.name);
alert(u.age);
*/ //statics(子类不能继承) inheritableStatics(子类可以继承) 给当前类定义静态方法或属性 /**
Ext.define('Person',{
config:{
name:'我是父类'
},
statics:{ //静态的方法或属性
static_id:'我是Person的id,不能被子类所继承!!'
},
inheritableStatics:{ //静态的方法或属性
inheritableStatics_id:'我是Person的id,我可以被子类继承!!'
},
constructor:function(config){
var me = this;
me.initConfig(config);
}
}); //一定注意:!!!!!//实例对象是无法使用静态属性或方法的
//var p = Ext.create('Person');
//alert(p.static_id);
//用类名去使用静态属性:!!!!
// alert(Person.static_id);
// alert(Person.inheritableStatics_id); Ext.define('User',{
extend:'Person' ,
config:{
age:20
}
});
alert(User.static_id);
alert(User.inheritableStatics_id); */ //mixins 混合的配置项,可以多继承的配置 /**
Ext.define("Sing",{
canSing:function(){
alert('cansing...');
}
});
Ext.define("Say",{
canSay:function(){
alert('cansay...');
}
});
Ext.define('User',{
mixins:{
sing:"Sing" ,
say:"Say"
}
}); var u = Ext.create("User");
u.canSay();
u.canSing();
*/ //^_^伪代码说明: requires 和 uses 以及 singleton
/**
Ext.define('MyComponent',{
//可能需要Ext或者是其他的类做支持
//requires加载需要的类时机是:当前类初始化之前被加载
//requires:['Ext.window.Window','Ext.button.Button']
//uses加载需要的类时机是:当前类初始化之后被加载
//uses:['Ext.form.Panel','Ext.grid.Panel']
//singleton:true //当前的类就被当做一个单例对象
});
*/ });

  

Ext.apply & Ext.applyIf

Ext.onReady(function(){

	//Ext.js

	//Ext.apply & Ext.applyIf

	/**
//Ext.apply就是为对象扩展属性或方法的
var src = {name:'张三',age:20}; //源对象
var config = {name:'李四',sex:'男'}; //配置对象
//Ext.apply(src , config);
Ext.applyIf(src,config); //如果当前对象存在属性,我就不进行copy 如果不存在则copy
// name : '李四' age : 20 sex:'男'
for(var attr in src){
alert(attr + " : " + src[attr]);
}
*/ /**
*
//Ext.extend
//Ext.typeOf 和原生的javascript typeof
// var str = '111';
// var num = 20;
// alert(Ext.typeOf(str));
// alert(Ext.typeOf(num));
// Ext.isArray()
// var arr = [1,2,3,4];
// Ext.iterate(arr,function(item){
// alert(item);
// }); //Ext.override
// Ext.define('User',{
// say:function(){
// alert('say....');
// }
// });
// var user = Ext.create('User');
// Ext.override(user,{
// say:function(){
// alert('我是覆盖后的say方法..');
// }
// });
// user.say(); */ //Ext-more.js });

  

如何创建一个Ext的类,创建类的复杂流程

定义类的方法:define

对于Ext4.X版本来说,采用了新定义类的define方法,而不是延续旧版本的extend方法,那么对于定义一个新的类。具体研究define的使用

Ext.define( classname,properties,callback);

---classname:要定义的新类的类名

---properties:新类的配置对象(Ext文档中 Class的配置项configs)

---callback:回调函数,当类创建完后执行该函数。

注解:对于Ext定义一个新的类。那么我们可以想象到。既然是利用Ext.define去创建类。那么创建的类一定是Ext所特有的类,不同于传统的JavaScript创建一个类,也就是我们要对define方法的第二个参数properties配置项进行配置,需要找到Ext对于类的支持的API进行配置

==========================================================

Configs配置项说明:

extends 用于继承
alias 类的别名
alternateClassName 备用名,与alias差不多
requires 需要使用到的类名数组,在动态加载时会根据该属性去下载类,注意需要的类是在当前类之前被加载
uses 与requires类似,但是被引用的类可以在该类之后才加载
constructor 构造器属性,一般用来初始化类的配置和调用其父类的方法
mixins 混入属性,多继承
config 定义类的配置项,会吧config里的每一个属性加上get和set方法
statics 定义静态方法,属性不能被子类继承
inheritableStatics 与statics类似,但是其属性可被子类继承
singleton 设置该类为单件模式

-----------------------------------------------------

 config、constructor

Ext.onReady(function(){

	//第12讲:config、constructor
/*
//在Ext中如何去定义一个类: Ext.define(className , properties , callback)
Ext.define('Person',{
//这里是对于这个类的一些配置信息
//config属性 就是配置当前类的属性内容,并且会加上get和set方法
config:{
name:'z3' ,
age: 20
},
//自己定义的方法
say:function(){
alert('我是方法...');
},
//给当前定义的类加一个构造器 ,目的就是为了初始化信息
constructor:function(config){
var me = this ;
// for(var attr in config){
// alert(attr + " : " + config[attr]);
// }
me.initConfig(config); // 真正的初始化传递进来的参数
}
}); //Ext.create 实例化一个对象
var p = Ext.create('Person',{
name:'王五' ,
age:30
});
alert(p.getName());
alert(p.getAge());
p.say();
*/
}

extend

Ext.onReady()
{
//extend //Ext的继承代码
/**
//Sup Class
Ext.define('Person',{
config:{
name:'bjsxt'
} ,
constructor:function(config){
var me = this ;
me.initConfig(config);
}
});
//Sub Class
Ext.define('Boy',{
//使用Ext的继承
extend:'Person',
config:{
sex:'男',
age:20
}
});
var b = Ext.create('Boy',{
name:'张三',
age:25
});
alert(b.name);
alert(b.sex);
alert(b.age); */ //javascript : prototype(原型) :所有类的实例对象所共享
/** function Person(name){
this.name = name;
//this.sayName = sayName ;
};
// function sayName(){
// alert(this.name);
// };
Person.prototype.sayName = function(){
alert(this.name);
}; var p1 = new Person('张三');
p1.sayName();
var p2 = new Person('李四');
p2.sayName();
alert(p1.sayName == p2.sayName); */ //javascript : prototype(原型) :实现继承
/** //SupClass
var Person = function(name){
this.name = name;
};
//alert(Person.prototype.constructor); //原型对象的构造器,默认是当前的类的模板
//SupClass prototype object
Person.prototype = {
constructor:Person ,
id:100
}; //SubClass
var Boy = function(name,sex,age){
//借用构造函数继承的方式
Person.call(this,name);
this.sex = sex ;
this.age = age ;
}; //实现原型继承: 继承了父类的模板和父类的原型对象
//Boy.prototype = new Person();
//自己实现extend的方法
function myextend(sub , sup){
var F = function() {}, //定义一个空函数做为中转函数
subclassProto, //子类的原型对象
superclassProto = sup.prototype; //把父类的原型对象 交给了superclassProto变量 F.prototype = superclassProto; // 做中转的位置:把父类的原型对象 赋值给了 F这个空函数的原型对象
subclassProto = sub.prototype = new F(); //进行原型继承
subclassProto.constructor = sub; //还原构造器
sub.superclass = superclassProto; //做了一个保存,保存了父类的原型对象
//目的是为了防止你大意了
if (superclassProto.constructor === Object.prototype.constructor) {
superclassProto.constructor = sup;
}
};
myextend(Boy ,Person);
var b = new Boy('李四','男',25);
alert(b.name);
alert(b.sex);
alert(b.id); */
}

alias别名、alternateClassName备用名

Ext.onReady()
{
//Ext.define 其他配置项 //别名、备用名
/**
Ext.define("User",{
config:{
name:'bjsxt111' ,
age:100
},
alias:'uu' ,//起别名 底层代码在Ext.ClassManger
alternateClassName:'uuu', //给当前类一个备用名 底层代码在Ext.ClassManger
constructor:function(config){
var me = this;
me.initConfig(config);
}
}); var u = Ext.create('uuu');
alert(u.name);
alert(u.age);
*/
}

 statics(子类不能继承) inheritableStatics(子类可以继承) 给当前类定义静态方法或属性

Ext.onReady()
{ //statics(子类不能继承) inheritableStatics(子类可以继承) 给当前类定义静态方法或属性 /**
Ext.define('Person',{
config:{
name:'我是父类'
},
statics:{ //静态的方法或属性
static_id:'我是Person的id,不能被子类所继承!!'
},
inheritableStatics:{ //静态的方法或属性
inheritableStatics_id:'我是Person的id,我可以被子类继承!!'
},
constructor:function(config){
var me = this;
me.initConfig(config);
}
}); //一定注意:!!!!!//实例对象是无法使用静态属性或方法的
//var p = Ext.create('Person');
//alert(p.static_id);
//用类名去使用静态属性:!!!!
// alert(Person.static_id);
// alert(Person.inheritableStatics_id); Ext.define('User',{
extend:'Person' ,
config:{
age:20
}
});
alert(User.static_id);
alert(User.inheritableStatics_id); */ }

mixins 混合的配置项,可以多继承的配置

Ext.onReady()
{
//mixins 混合的配置项,可以多继承的配置 /**
Ext.define("Sing",{
canSing:function(){
alert('cansing...');
}
});
Ext.define("Say",{
canSay:function(){
alert('cansay...');
}
});
Ext.define('User',{
mixins:{
sing:"Sing" ,
say:"Say"
}
}); var u = Ext.create("User");
u.canSay();
u.canSing();
*/
}

伪代码说明: requires 和 uses 以及  singleton

Ext.onReady()
{
//^_^伪代码说明: requires 和 uses 以及 singleton
/**
Ext.define('MyComponent',{
//可能需要Ext或者是其他的类做支持
//requires加载需要的类时机是:当前类初始化之前被加载
//requires:['Ext.window.Window','Ext.button.Button']
//uses加载需要的类时机是:当前类初始化之后被加载
//uses:['Ext.form.Panel','Ext.grid.Panel']
//singleton:true //当前的类就被当做一个单例对象
});
*/
}

Ext.js和Ext-more.js的深入解析。

Ext对原生JavaScript类的扩展

Ext操作DOM

Ext开始响应事件

认识Ext.js和Ext-more.js , 这两个文件包含了Ext的一些基础定义,基本的属性和方法

Ext.onReady(function(){

	//Ext.js

	//Ext.apply & Ext.applyIf

	/**
//Ext.apply就是为对象扩展属性或方法的
var src = {name:'张三',age:20}; //源对象
var config = {name:'李四',sex:'男'}; //配置对象
//Ext.apply(src , config);
Ext.applyIf(src,config); //如果当前对象存在属性,我就不进行copy 如果不存在则copy
// name : '李四' age : 20 sex:'男'
for(var attr in src){
alert(attr + " : " + src[attr]);
}
*/ /**
*
//Ext.extend
//Ext.typeOf 和原生的javascript typeof
// var str = '111';
// var num = 20;
// alert(Ext.typeOf(str));
// alert(Ext.typeOf(num));
// Ext.isArray()
// var arr = [1,2,3,4];
// Ext.iterate(arr,function(item){
// alert(item);
// }); //Ext.override
// Ext.define('User',{
// say:function(){
// alert('say....');
// }
// });
// var user = Ext.create('User');
// Ext.override(user,{
// say:function(){
// alert('我是覆盖后的say方法..');
// }
// });
// user.say(); */ //Ext-more.js });

extJS--尚的更多相关文章

  1. 尚学堂的一个用了ExtJs的页面代码

    <html>     <head>         <meta http-equiv="Content-Type" content="tex ...

  2. ExtJS 4.2 评分组件

    上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...

  3. ExtJS 4.2 介绍

    本篇介绍ExtJS相关知识,是以ExtJS4.2.1版本为基础进行说明,包括:ExtJS的特点.MVC模式.4.2.1GPL版本资源的下载和说明以及4种主题的演示. 目录 1. 介绍 1.1 说明 1 ...

  4. ExtJS 4.2 第一个程序

    本篇介绍如何创建一个ExtJS应用程序.并通过创建目录.导入文件.编写代码及分析代码等步骤来解释第一个ExtJS程序. 目录 1. 创建程序 1.1 创建目录建议 1.2 实际目录 1.3 index ...

  5. ExtJS 4.2 组件介绍

    目录 1. 介绍 1.1 说明 1.2 组件分类 1.3 组件名称 1.4 组件结构 2. 组件的创建方式 2.1 Ext.create()创建 2.2 xtype创建 1. 介绍 1.1 说明 Ex ...

  6. ExtJS 4.2 组件的查找方式

    组件创建了,就有方法找到这些组件.在DOM.Jquery都有各自的方法查找元素/组件,ExtJS也有自己独特的方式查找组件.元素.本次从全局查找.容器内查找.form表单查找.通用组件等4个方面介绍组 ...

  7. ExtJS 4.2 业务开发(一)主页搭建

    本篇开始搭建一个ExtJS 4.2单页面应用, 这里先介绍主页的搭建,内容包括:主页结构说明.扩展功能等方面. 目录 1. 主页结构说明 2. 扩展功能 3. 在线演示 1. 主页结构说明 1.1 主 ...

  8. ExtJS 4.2 业务开发(二)数据展示和查询

    本篇开始模拟一个船舶管理系统,提供查询.添加.修改船舶的功能,这里介绍其中的数据展示和查询功能. 目录 1. 数据展示 2. 数据查询 3. 在线演示 1. 数据展示 在这里我们将模拟一个船舶管理系统 ...

  9. ExtJS 4.2 业务开发(三)数据添加和修改

    接上面的船舶管理业务,这里介绍添加和修改操作. 目录 1. 添加操作 2. 修改操作 3. 在线演示 1. 添加操作 1.1 创建AddShipWindow.js 在业务中的view目录下创建一个Ad ...

  10. ExtJS 4.2 Grid组件的单元格合并

    ExtJS 4.2 Grid组件本身并没有提供单元格合并功能,需要自己实现这个功能. 目录 1. 原理 2. 多列合并 3. 代码与在线演示 1. 原理 1.1 HTML代码分析 首先创建一个Grid ...

随机推荐

  1. python-多任务编程03-迭代器(iterator)

    迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 可迭代对象(Iterable) 能够被循环遍历(迭代)的对象称为可迭代 ...

  2. 跟老刘学运维day02~新手必须掌握的Linux命令(2)

    第2章 Linux命令 1.Shell 计算机硬件:由运算器.控制器.存储器.输入/输出设备等共同组成 Shell:人与硬件的翻译官,人要想使用硬件,需要服务程序 Bash四大好处: (1)通过上下方 ...

  3. 如何使用Excel管理项目?

    1.什么是复杂问题? 复杂问题需要很多道工序,涉及到与多个人进行沟通,人的注意力没法持续关注,导致很容易忘掉很多重要步骤.像这种问题就要用到项目管理工具,在重要的节点上,来检查自己是否遗漏了重要的环节 ...

  4. 第二部分_Mac技巧

    原文是"池建强"的微信文章,公众号为"MacTalk" 第五十一天 mdfind是一个非常灵活的全局搜索命令,类似Spotlight的命令行模式,可以在任何目录 ...

  5. pandas_时间序列和常用操作

    # 时间序列和常用操作 import pandas as pd # 每隔五天--5D pd.date_range(start = '',end = '',freq = '5D') ''' Dateti ...

  6. PHP zip_entry_filesize() 函数

    定义和用法 The zip_entry_filesize() 函数返回 zip 档案项目的原始文件尺寸(在压缩之前).高佣联盟 www.cgewang.com 语法 zip_entry_filesiz ...

  7. PHP ucwords() 函数

    实例 把每个单词的首字符转换为大写: <?php高佣联盟 www.cgewang.comecho ucwords("hello world");?> 定义和用法 ucw ...

  8. PHP addChild() 函数

    实例 给 body 元素和 footer 元素添加一个子元素: <?php$note=<<<XML<note>高佣联盟 www.cgewang.com<to& ...

  9. 唯一约束 UNIQUE KEY

    目录 什么是唯一约束 与主键的区别 创建唯一约束 唯一性验证 什么是唯一约束 Unique Key:它是 MySQL 中的唯一约束,是指在所有记录中字段的值不能重复出现.例如,为 id 字段加上唯一性 ...

  10. Golang SQL连接池梳理

    目录 一.如何理解数据库连接 二.连接池的工作原理 三.database/sql包结构 四.三个重要的结构体 4.1.DB 4.2.driverConn 4.3.Conn 五.流程梳理 5.1.先获取 ...