Extjs动态增删组件
在项目中遇到要动态的增加删除一个组件,于是就查找资料,实现了下面的效果。
Ext.onReady(function(){
// Ext.Msg.alert("提示","hello world")
var PanelCollect = null,
BusinessTimeArray = []; //营业时间段,该属性值为对象,格式: {start:'00:12',end:'01:30'}
//营业时间控件进行对象
function CreateBusinessTimeControl(winObj,start,end) {
//计算下一个时间控件显示的开始时间与结束时间
var winBusiness = "",
beginTime = start ? start : "00:00",
endTime = end ? end : "23:59";
var panelArray = winObj.items;
if (!start && !end && panelArray.length > 0) {
var len = panelArray.items.length,
lastTimeControl = panelArray.items[len - 1];
beginTime = lastTimeControl.query("[name=BusinessEndTime]")[0].rawValue;
if (beginTime === endTime) {
Ext.Msg.alert("温馨提示", "亲,已经到最后了,不能增加了");
return;
}
}
var timePanel = Ext.create("Ext.panel.Panel", {
layout: "hbox",
bodyPadding: "5 0 5 0",
name: "timePanel",
frame:true,
border:0,
items: [{
xtype: "timefield",
altFormats: "H:i|G:i:s|H:i:s|g:i:s|h:i:s",
width: 200,
labelWidth: 100,
labelAlign: "right",
fieldLabel: "开始时间",
fieldName: "BusinessBeginTime",
format: "H:i",
name: "BusinessBeginTime",
increment: "30",
value: beginTime,
minValue: beginTime,
minText: "时间最小值不能小于{0}",
maxValue: endTime,
maxText: "时间最大值不能超过{0}",
//editable: true,
invalidText: "时间格式无效",
listeners: {
select:function (combo, records, eOpts ) {
console.log(records)
//开始时间必须小于结束时间
var endObj = this.nextSibling();
if(records>endObj.value)
{
var tempTime = endObj.value;
endObj.setValue(records);
this.setValue(tempTime);
}
}
}
}, {
xtype: "timefield",
altFormats: "H:i|G:i:s|H:i:s|g:i:s|h:i:s",
labelWidth: 60,
labelAlign: "right",
fieldLabel: "结束时间",
afterLabelTextTpl: "",
fieldName: "BusinessEndTime",
format: "H:i",
width: 160,
name: "BusinessEndTime",
increment: "30",
value: endTime,
minValue: beginTime,
minText: "时间最小值不能小于{0}",
maxValue: endTime,
maxText: "时间最大值不能超过{0}",
//editable: true,
invalidText: "时间格式无效",
listeners: {
select: function (combo, records, eOpts) {
var startObj = this.previousSibling();
//开始时间必须小于结束时间
if (startObj.value > records) {
var tempTime = startObj.value;
startObj.setValue(records);
this.setValue(tempTime);
}
}
}
}, {
xtype: "button",
text: "新增",
style: "margin:0px 0px 0px 10px ",
handler: function () {
//增加时间控件
CreateBusinessTimeControl(winObj)
}
}, {
xtype: "button",
text: "移除",
style: "margin:0px 0px 0px 10px ",
handler: function (obj) {
//移除时间选择
winObj.remove(obj.ownerCt, true);
winObj.doLayout();
}
}]
});
//增加控件
winObj.items.add(timePanel);
winObj.doLayout();
}
//创建营业时间设置的窗体
function CreateBusinessTimeSettingWindow(){
var winBusinessTimeSetting = new Ext.Window({
title: '营业时间设置',
name: "winBusinessTimeSetting",
width: 500,
height: 460,
modal: true,
resizable: false,
closable: true,
layout: "vbox",
autoScroll:true,
items: [],
buttons: [{
text: "清空",
handler: function (obj) {
var winObj = obj.up("window"),
winItems = winObj.items;
if (winItems.length > 0) {
BusinessTimeArray = [];
while (winItems.items.length > 0)
{
winObj.remove(winItems.items[0], true);
}
winObj.doLayout();
}
}
}, {
text: "新增",
handler: function (obj) {
//添加一个时间选择组件
CreateBusinessTimeControl(obj.up("window"));
}
}, {
text: "完成",
handler: function (obj) {
//获取选中的所有时间段
var winItems = obj.up("window").items;
if(winItems.length>0)
{
var timeItems = winItems.items,
startTime = "",
endTime = "",
timeArray = [];
for(var i=0;i<timeItems.length;i++)
{
startTime = timeItems[i].query("[name=BusinessBeginTime]")[0].rawValue;
endTime = timeItems[i].query("[name=BusinessEndTime]")[0].rawValue;
timeArray.push({ start: startTime, end: endTime });
}
BusinessTimeArray = timeArray;
//显示设置的营业时间值
ShowBusinessTime();
}
obj.up("window").close();
}
}]
});
winBusinessTimeSetting.show();
//显示已经设置的时间段
if (BusinessTimeArray.length > 0) {
for(var i=0;i<BusinessTimeArray.length;i++)
{
CreateBusinessTimeControl(winBusinessTimeSetting, BusinessTimeArray[i].start, BusinessTimeArray[i].end);
}
//显示设置的营业时间值
ShowBusinessTime();
}
}
//显示设置的营业时间值
function ShowBusinessTime(){
var strTimeArray = [],
strTime = "";
for(var i=0;i<BusinessTimeArray.length;i++)
{
strTimeArray.push(BusinessTimeArray[i].start + "~" + BusinessTimeArray[i].end);
}
//显示时间设置
if (strTimeArray.length > 4) {
strTime = "(已设置" + strTimeArray.slice(0, 4).join(",") + "...)";
} else {
strTime = "(已设置" + strTimeArray.join(",") + ")";
}
PanelCollect.query("[name=labelBusinessTime]")[0].el.dom.innerHTML = strTime;
}
PanelCollect = Ext.create('Ext.form.Panel', {
title: "外卖对接",
name: "ThirdWaimaiPanel",
bodyPadding: '20 10 10 10',
style: 'margin-top:5px',
layout: "vbox",
renderTo:Ext.getBody(),
defaults:{
bodyPadding: "10 0 0 0",
layout: 'hbox',
border:0,
},
width:600,
items: [
{
xtype: 'panel',
width: 500,
items: [{
xtype: "button",
text: "营业时间设置",
name: "btnBusinessTimeSetting",
width: 150,
height: 30,
handler: function () {
CreateBusinessTimeSettingWindow();
}
}, {
xtype: "label",
name: "labelBusinessTime",
style:"line-height:30px; margin-left:5px;",
html: "(未设置)"
}]
}
]
});
});
效果图如下:

Extjs动态增删组件的更多相关文章
- ExtJS动态创建组件
J是代码动态创建dom: 或者 eval有后台组织代码,前台执 ======================= ExtJS组件的动态的创建: 程序中大多数时候需要在后台根据业务逻辑创建符合要求的组件, ...
- ExtJS 动态组件与组件封装
介绍几个有用的函数: Ext.apply---追加配置选项Ext.reg,----注册xtypeExt.extend--扩展组件||操作({}|| cfg)fireEvent自定义事件机制 --- ...
- Java 动态编译组件 & 类动态加载
1.JDK6 动态编译组件 Java SE 6 之后自身集成了运行时编译的组件:javax.tools,存放在 tools.jar 包里,可以实现 Java 源代码编译,帮助扩展静态应用程序.该包中提 ...
- 动态创建组件TEdit
//动态创建组件TEdit procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftSt ...
- Delphi动态创建组件,并释放内存
开发所用delphi版本是xe2,效果图如下: 代码如下: ---------------------------------------------------------------------- ...
- extjs每一个组件要设置唯一的ID
extjs每一个组件要设置唯一的ID,否则会造成各种错误 EXTJS基本上是靠ID来识别组件的,假如你在panel1中有个ID:"keyword"的textfield,而panel ...
- JS、JQuery和ExtJs动态创建DOM对象
做了个简单使用JavaScript.JQuery.ExtJs进行DOM对象创建的测试,主要是使用JavaScript.JQuery.ExtJs动态创建Table对象.动态Table数据填充.多选控制. ...
- [extjs(2)] extjs第一个组件treepanel
刚刚在接触extjs这个前段插件,由于公司是用这个来做前段的,所以有必要花点时间来掌握一下,下面是我自己的非常浅的学习总结,后期会慢慢添加的!! 一.TreePanel基本配置参数: animate: ...
- Angular动态创建组件之Portals
这篇文章主要介绍使用Angular api 和 CDK Portals两种方式实现动态创建组件,另外还会讲一些跟它相关的知识点,如:Angular多级依赖注入.ViewContainerRef,Por ...
随机推荐
- mysql表操作与权限操作
修改表ALTER TABLE 语法: . 修改表名 ALTER TABLE 表名 RENAME 新表名; . 增加字段 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…], ...
- Android 接入X5WebView,让WebView加载更快;
X5内核,微信和QQ浏览器都在用的WebView: 官网地址:https://x5.tencent.com,详细的信息进官网了解: 这是官方的宣传语: 1) 速度快:相比系统webview的网页打开速 ...
- for循环中进行联网请求数据、for循环中进行异步数据操作,数据排序错乱问题解决;
for循环中进行联网请求数据,由于网络请求是异步的,第一个网络请求还没有回调,第二次第三次以及后续的网络请求又已经发出去了,有可能后续的网络请求会先回调:这时我们接收到的数据的排序就会错乱:怎么才能让 ...
- linux设置服务器时间同步
yum install -y rdate 服务器请设置 */5 * * * * /usr/bin/rdate -s time-b.nist.gov ubuntu 设定时区:dpkg-reconfigu ...
- python随机数random
1.random.random()方法用于生成一个0到1的随机浮点数:0<=n<1.0 2.random.uniform(a,b):用于生成一个指定范围内的随机浮点数,两格参数中,其中一个 ...
- linux安装phpstorm
1.下载phpStorm安装包,下载地址:https://download.jetbrains.8686c.com/webide/PhpStorm-2018.3.1.tar.gz 2.解压到/usr/ ...
- vue实现点击、滑动右侧字母对应各个城市
1.字母组件给父组件传递当前点击的字母值 @click="handleLetterClick" //绑定事件 handleLetterClick (e) { //向上传递参数 th ...
- ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
- centos7-vmware克隆后的配置
需要使用vmware克隆出多台服务器,验证集群功能. 所以采用全克隆的方式,生成多台虚拟机. 这里采用的是最小化安装的配置,桥接自动获取IP,其它配置可能不适合该指导. 修改网卡的MAC地址 网络配置 ...
- 8.2.1.2-MySQL如何优化 WHERE 语句
这一章节讨论能够在WHERE处理语句中使用的优化. 样例使用SELECT 语句, 但是同样适用于DELETE,UPDATE语句中的WHERE语句. 注意 因为MYSQL优化器在不断的发展,MySQL执 ...