在项目中遇到要动态的增加删除一个组件,于是就查找资料,实现了下面的效果。

          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动态增删组件的更多相关文章

  1. ExtJS动态创建组件

    J是代码动态创建dom: 或者 eval有后台组织代码,前台执 ======================= ExtJS组件的动态的创建: 程序中大多数时候需要在后台根据业务逻辑创建符合要求的组件, ...

  2. ExtJS 动态组件与组件封装

      介绍几个有用的函数: Ext.apply---追加配置选项Ext.reg,----注册xtypeExt.extend--扩展组件||操作({}|| cfg)fireEvent自定义事件机制 --- ...

  3. Java 动态编译组件 & 类动态加载

    1.JDK6 动态编译组件 Java SE 6 之后自身集成了运行时编译的组件:javax.tools,存放在 tools.jar 包里,可以实现 Java 源代码编译,帮助扩展静态应用程序.该包中提 ...

  4. 动态创建组件TEdit

    //动态创建组件TEdit procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftSt ...

  5. Delphi动态创建组件,并释放内存

    开发所用delphi版本是xe2,效果图如下: 代码如下: ---------------------------------------------------------------------- ...

  6. extjs每一个组件要设置唯一的ID

    extjs每一个组件要设置唯一的ID,否则会造成各种错误 EXTJS基本上是靠ID来识别组件的,假如你在panel1中有个ID:"keyword"的textfield,而panel ...

  7. JS、JQuery和ExtJs动态创建DOM对象

    做了个简单使用JavaScript.JQuery.ExtJs进行DOM对象创建的测试,主要是使用JavaScript.JQuery.ExtJs动态创建Table对象.动态Table数据填充.多选控制. ...

  8. [extjs(2)] extjs第一个组件treepanel

    刚刚在接触extjs这个前段插件,由于公司是用这个来做前段的,所以有必要花点时间来掌握一下,下面是我自己的非常浅的学习总结,后期会慢慢添加的!! 一.TreePanel基本配置参数: animate: ...

  9. Angular动态创建组件之Portals

    这篇文章主要介绍使用Angular api 和 CDK Portals两种方式实现动态创建组件,另外还会讲一些跟它相关的知识点,如:Angular多级依赖注入.ViewContainerRef,Por ...

随机推荐

  1. Linux内核学习笔记二——进程

    Linux内核学习笔记二——进程   一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...

  2. SAS DATA ENCODING 解决odbc乱码问题

    首先获取编码格式: %PUT %SYSFUNC(getOption(ENCODING)); libname findoout ODBC datasrc=SurveyReport user=shendu ...

  3. js四则运算增强功能

    目录 背景 具体代码 背景 项目中用到浮点数,Int. 在 js中 Number类型比较古怪, 加上牵涉到财务软件, 前台js实时运算等. 有时候会出现精确度的问题 , 公共方法中有好事者写的方法. ...

  4. U3D学习09-物体简单控制及视角观察

    一.Character Control非刚体 1.场景初始化,注意调整CC的轴心,不需要碰撞,且删除CC子物体的碰撞.2.移动:       获取X,Z轴变化,定义变量h,v:        定义移动 ...

  5. TP框架做网页静态化

    首先放上一张某手册中的一段代码: 我们要想在TP框架中执行网页静态化,在这段代码的基础上稍加添加就可以了: 在TP5框架中,为了方便寻找模板文件与生成的静态文件,我们将模板文件以及生成的静态文件放在p ...

  6. es6(10)--Set,Map(1)

    //Set { let list=new Set(); list.add(5);//添加 list.add(7); //属性size就是长度 console.log('size',list.size) ...

  7. log4js 2.X版本配置详解

    const log4js = require('log4js'); log4js.configure({ appenders: { cheese: { type: 'file', filename: ...

  8. Java中对List集合的常用操作(转)

    list中添加,获取,删除元素: list中是否包含某个元素: list中根据索引将元素数值改变(替换): list中查看(判断)元素的索引: 根据元素索引位置进行的判断: 利用list中索引位置重新 ...

  9. 踩过的坑:InteliIJ IDEA 打开的项目突然左侧目录结构消失了,如何处理?

    试了很多的办法,删除项目,然后重新从git下载,再导入项目,但是对于暂存未上传到git的文件也会被一并删除,这样就亏大发了 之前一直没有找到解决办法,这里记一下终身有效的办法,并且比较好操作 按下列步 ...

  10. java-代码生成器

    package ormRex; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import ...