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 ...
随机推荐
- Composer 安装时要求输入授权用户名密码
composer require "overtrue/laravel-socialite:~2.0" Authentication required (packagist.phpc ...
- 如果在 Windows 10 家庭版中使用「远程桌面」
远程桌面是 Windows 系统下原生.跨平台的的远程控制功能,拥有微软官方提供的各平台客户端,就可以让你在远程轻松帮助别人或者控制自己的 PC,而从 Windows 7 以来家庭版都不支持桌面功能
- echart力导向图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="GBK" ...
- hive on spark的坑
原文地址:http://www.cnblogs.com/breg/p/5552342.html 装了一个多星期的hive on spark 遇到了许多坑.还是写一篇随笔,免得以后自己忘记了.同事也给我 ...
- Java for循环和foreach循环的性能比较
就是有些人循环用的是普通for循环,有些人用的是foreach循环,它们之间有什么区别?应该在什么时候使用这两种循环了? 两种循环的语法格式: 普通for循环语法: for (int i = 0; i ...
- concurrent.futures进线程池和协程
concurrent.futures 异步执行进程线程池的模块,一个抽象类,定义submit,map,shutdown方法 from concurrent.futures import Process ...
- 电商系统架构总结2(Redis)
二 Redis缓存 考虑到将来服务器的升级扩展,使用redis代替.net内置缓存是比较理想的选择.redis是非常成熟好用的缓存系统,安装配置非常简单,直接上官网下载安装包 安装启动就行了. 1 ...
- Java - 25 Java 包(package)
Java 包(package) 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间. 包的作用 1 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2 如同文件夹一样,包 ...
- element-ui 带单选框的表格
效果:不只是带单选框,点击当前行单选框选中状态网上查了一些发现很多都是只能点击当前radio选中当前行,配合element-ui的单选table时发现两个的选择状态是不一致的,所以调整了一下效果 提供 ...
- 最简单的DHCP服务
这几天在准备网络安装linux操作系统.最后决定用pxe + kickstart 的方式完成.原理.方案弄完了之后,开始搭建,结果被DHCP给挡住了.这不就得研究研究最简单最实用的DHCP使用方法. ...