这几天刚刚开始学习extjs,把学习过程中容易出的问题汇总以供大家参考。
在学习过程中,我发现写代码时很容易与jquery的格式混淆,因此将详细的记录下来。
1、添加extjs的引用
<head runat="server">
<title></title>
<link href="../ext-3.3.0/resources/css/ext-all.css" rel="stylesheet" type="text/css" /> --样式文件
<script src="../ext-3.3.0/adapter/ext/ext-base.js" type="text/javascript"></script>
<script src="../ext-3.3.0/ext-all.js" type="text/javascript"></script>
<script src="../ext-3.3.0/ext-lang-zh_CN.js" type="text/javascript"></script>
</head>
2、开始写简单的extjs程序,我做了一个例子,添加人员信息,截图如下:
3、下面是完整的代码,注意这只是简单的客户端操作,并没有与服务器进行交互。
<script type="text/javascript">
Ext.onReady(function () {
var JOB = Ext.data.Record.create([{//record创建,返回record
name: "job"
}]);
new Ext.Window({
title: "添加人员",
width: 500,
height: 350,
layout: "form",
frame: true,
plain: true,
resizable: false,
labelWidth: 60,
defaultType: "textfield",
defaults: { baseCls: "x-plain" },
bodyStyle: "padding:10px 0 0 10px",
buttonAlign: "center",
items: [{
xtype: "panel",
layout: "column",
items: [{
columnWidth: .5,
layout: "form",
defaultType: "textfield",
baseCls: "x-plain",
defaults: "width:160",
labelWidth: 60,
items: [{
fieldLabel: "姓名"
}, {
fieldLabel: "年龄",
readonly: true,
value: 25
}, {
xtype: "datefield",
width: 130,
fieldLabel: "出生日期",
value: "1989-04-20",
format: "Y-m-d",
listeners: {
blur: function (_df) {
var _age = _df.ownerCt.findByType("textfield")[1];
_age.setValue(new Date().getFullYear() - _df.getValue().getFullYear() + 1);
}
}
}, {
fieldLabel: "联系电话"
}, {
fieldLabel: "手机号码"
}, {
fieldLabel: "电子邮件"
}, {
fieldLabel: "性别",
xtype: "combo",
width: 130,
mode: "local", //从本地读数据,默认为query,从服务器读数据
triggerAction: "all", //触发器被激活时执行
readonly: true,
value: "男",
displayField: "sex", //默认显示的字段名
store: new Ext.data.SimpleStore({
fields: ["sex"],
data: [["男"], ["女"]]
})
}]
}, {
columnWidth: .5,
layout: "form",
baseCls: "x-plain",
labelWidth: 60,
items: [{
xtype: "textfield",
fieldLabel: "个人照片",
width: 160,
height: 175,
inputType: "image"
}]
}]
}, {
fieldLabel: "身份证号",
width: 400
}, {
fieldLabel: "具体地址",
width: 400
}, {
xtype: "panel",
layout: "column",
defaults: { baseCls: "x-plain" },
items: [{
columnWidth: .4,
layout: "form",
labelWidth: 60,
items: {
xtype: "combo",
fieldLabel: "职位",
mode: "local",
width: 120,
triggerAction: "all",
displayField: "job",
readonly: true,
listeners: {
select: function (_combo, _record, _index) {
_combo["selectitems"] = _record; //给combo加属性,selectitems如果存在直接引用,不存在则创建
}
},
store: new Ext.data.SimpleStore({
fields: ["job"]
//data: [["程序员"], ["医生"], ["经理"], ["主管"]]
})
}
}, {
layout: "form",
columnWidth: .2,
items: {
xtype: "button",
text: "添加职位",
handler: function () {
var _window = this.ownerCt.ownerCt.ownerCt;
var _job = _window.findByType("combo")[1];
Ext.MessageBox.prompt("添加职位", "职位名称", function (_btn, _text) {
if (_btn == "ok") {
var _store = this.store;
_store.insert(0, new JOB({//插入数据
job: _text
}));
this.setValue(_text);
this["selectitems"] = _store.getAt(0);
}
}, _job);
}
}
}, {
layout: "form",
columnWidth: .2,
items: {
xtype: "button",
text: "修改职位",
handler: function () {
var _window = this.ownerCt.ownerCt.ownerCt;
var _job = _window.findByType("combo")[1];
if (_job["selectitems"] != null) {
Ext.MessageBox.prompt("修改职位", "职位名称", function (_btn, _text) {
if (_btn == "ok") {
this["selectitems"].set("job", _text);
this.setValue(_text);
}
}, _job, false, _job.getValue());
}
}
}
}, {
layout: "form",
columnWidth: .2,
items: {
xtype: "button",
text: "删除职位",
handler: function () {
var _window = this.ownerCt.ownerCt.ownerCt;
var _job = _window.findByType("combo")[1];
if (_job["selectitems"] != null) {
Ext.MessageBox.confirm("删除职位", "你确定要删除该职位吗?", function (_btn) {
if (_btn == "yes") {
try {
this.store.remove(this["selectitems"]);
} catch (_err) { }
if (this.store.getCount() != 0) {
this.setValue(this.store.getAt(0).get("job"));
this["selectitems"] = this.store.getAt(0);
}
else {
this.setValue("");
}
}
}, _job);
}
}
}
}]
}],
showLock: false,
listeners: {
show: function (_window) {
if (!_window.showLock) {
_window.findByType("textfield")[7].getEl().dom.src = "918.jpg";
_window.showLock = true;
}
// var _job = _window.findByType("combo")[1];
// var _store = _job.getStore();
// _job.setValue(_store.getAt(0).get("job"));
// _job["selectitems"] = _store.getAt(0); //默认选择第一个
}
},
buttons: [{
text: "确定"
}, {
text: "取消"
}]
}).show();
});
</script>
4、在浏览器查看,就可以看到效果了,下面列举编写extjs代码注意事项
1)页面初始化
Ext.onReady(function () {
这里是代码
});
2)items
items:{} 只有一个项时;
items:[{},{},{}]有多个项时;
3)listeners格式
listeners:{
blur:function(){},
click:function(){}
}
4)store存储数据
store: new Ext.data.SimpleStore({
fields: ["sex"],
data: [["男"], ["女"]]
})
5)handler默认事件,如按钮的默认事件为click事件
handler: function () { }
6)record
var JOB = Ext.data.Record.create([{//record创建,返回record
name: "job"
}]);