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 ...
随机推荐
- c# 异步进度条组件BackgroundWorker
//控件事件调用DoWork()方法就行. #region 进度条 private BackgroundWorker worker = null; private void DoWork(string ...
- dropdownlist 绑定方法
this.ddlUnit.SelectedValue = id; //注意大小写,如果选中失败会显示默认值. ListItem item=ddlUnit.Items.FindByValue(id); ...
- sql server 日志传送问题整理
1.数据库备用/只读状态恢复为联机 SELECT DATABASEPROPERTYEX('ty_szum_oa_v2_bak','IsInStandBy') restore database ty_s ...
- (转)Floyd算法
原文地址:http://www.cnblogs.com/twjcnblog/archive/2011/09/07/2170306.html 参考资料:http://developer.51cto.co ...
- CS229 6.17 Neurons Networks convolutional neural network(cnn)
之前所讲的图像处理都是小 patchs ,比如28*28或者36*36之类,考虑如下情形,对于一副1000*1000的图像,即106,当隐层也有106节点时,那么W(1)的数量将达到1012级别,为了 ...
- Windows Server 2012R2 网络地址转换NAT
一.NAT概述 网络地址转换NAT(Network Address Translation)可以动态改变通过路由器的IP报文的内容(修改报文的源IP地址和/或目的IP地址).离开路由器的报文的源地址或 ...
- 模拟python中的Yield伪并发
并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行. #Yield伪并发 _author_= ...
- jieba gensim 用法
简单的问答已经实现了,那么问题也跟着出现了,我不能确定问题一定是"你叫什么名字",也有可能是"你是谁","你叫啥"之类的,这就引出了人工智能 ...
- Tomcat内存优化
一.Tomcat内存优化 T omcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.sh 中设置 JAVA_OPTS参数. 1.JAVA_OP ...
- Postman用法,了解一下
一.Postman的基础功能 二.接口请求流程 1. GET 请求 GET请求:点击Params,输入参数及value,可输入多个,即时显示在URL链接上, 所以,GET请求的请求头与请求参数如在接口 ...