ExtJS入门教程01,Window如此简单,你怎能不会?

简介:

这是一系列ExtJS教程,今天的是第一篇,主要介绍ExtJS中Window的基本用法。希望大家能够支持!

来吧,创建一个漂亮的弹出窗

var win = Ext.create("Ext.Window", {
    title: "ExtJS Window",
    width: 500,
    height: 300,
    autoShow: true
});

效果:

image

小伙伴们注意了,如果不加autoShow:true的时候,window是不会显示出来的,当然,我们可以使用win.show()方法来显示一个窗口。

在窗口中显示一个网页

小伙伴们常常希望能够在window中添加iframe,可以方便的将其它页面显示在窗口中,具体的做法是如下:

Ext.onReady(function () {
    var win = Ext.create("Ext.Window", {
        title: "ExtJS Window",
        width: 500,
        height: 300,
        html:'<iframe style="overflow:auto;width:100%; height:100%;" src="http://www.qeefee.com" frameborder="0"></iframe>',
        autoShow: true
    });
});

效果:

image

(我这里显示了自己的网站,臭美一下~)

为window指定html属性,这个属性是要在window的body中显示的html元素,可以是任意的html标签(iframe也是html标签),例如我们要显示一段话:

Ext.onReady(function () {
    var win = Ext.create("Ext.Window", {
        title: "ExtJS Window",
        width: 500,
        height: 300,
        html:'<p>齐飞是个程序员!</p>',
        autoShow: true
    });
});

效果如下:

image

显示大段的HTML

当然,小伙伴们的需求总是很多的,比如就有人说了,html属性如果很长,这样拼接字符串岂不是很丑?!

答案是肯定的,丑的不能再丑了~大家看一下iframe的那个代码,已经是比较长了,编辑的时候经常要拖动下面的滚动条,这样显然是不方便的,并且还要经常写属性,引号、双引号来回切换,简直是烦透了,有没有解决办法呢?

额,办法肯定是有的,小伙伴们,来试试contentEl配置项吧。

contentEl配置项允许我们将一个html元素指定为window要显示的内容,也就是说,如果我们页面上有一个如下的div:

<div id="content">
    <strong>Window 的内容</strong>
    <p>齐飞是个程序员!</p>
</div>

我们可以在window的配置中来使用:

Ext.onReady(function () {
    var win = Ext.create("Ext.Window", {
        title: "ExtJS Window",
        width: 500,
        height: 300,
        contentEl: 'content',
        autoShow: true
    });
});

效果如下:

image

contentEl可以将页面中现有的html元素添加到window中,需要注意的是一定要在页面加载完成之后使用,否则页面中的元素是不存在的。

解决内容闪烁的问题

这个时候,爱找麻烦的小伙伴又站了出来,小伙伴说页面加载以后内容先在页面中绘制了,会闪烁一下才显示在window中,额,当然,这是一个问题,那么该如何解决呢?

聪明的小伙伴这个时候自己想到一个办法,就是先将div隐藏,加一个style属性,把display设置为none;

爱动手的小伙伴验证了聪明的小伙伴的想法,发现div在window中仍然是隐藏的,如果我们再添加一个额外的方法岂不是大费周章?

现在我们来看一看contentEl的API吧,在api的最后一段,有这样一句话:

Add either the x-hidden or the x-hide-display CSS class to prevent a brief flicker of the content before it is rendered to the panel.

英语好的小伙伴们知道了吧,为我们的div添加一个x-hidden或者x-hide-display属性就能简单的解决内容闪烁的问题了。修改后的div如下:

<div id="content" class="x-hidden">
    <strong>Window 的内容</strong>
    <p>齐飞是个程序员!</p>
</div>

作为一个容器,它应该这样

看到了吧,window就是这么简单,我们可以很方便的来使用它。

通过Ext.create来创建window对象,create方法的第二个参数为window的配置项,包括width、height等。

ExtJS window作为一个容器,可以在里面添加其他的容器或组件,例如form、grid等,在添加extjs组件的时候可以使用items配置项来实现。

下面的代码演示了如何向window中添加一个form,并在form中加入一些控件:

Ext.onReady(function () {
    var win = Ext.create("Ext.Window", {
        title: "ExtJS Window",
        width: 500,
        height: 300,
        items: [
            {
                xtype: "form",
                border: false,
                bodyPadding: 5,
                fieldDefaults: {
                    labelAlign: 'right',
                    labelWidth: 60,
                    width: 470
                },
                items: [
                    {
                        xtype: "textfield", fieldLabel: "姓名"
                    },
                    {
                        xtype: "textarea", fieldLabel: "留言"
                    }
                ]
            }
        ],
        buttons: [
            {
                text: "确定"
            }
        ],
        autoShow: true
    });
});

效果如图:

image

哎呀,我被关闭了!

小伙伴们通常希望在window关闭的时候得到通知,例如刷新现有的列表等,现在extjs中的事件是通过在配置项中添加listeners来完成,当然,如果是动态添加事件,就要使用on方法了。

我们先来一个通过listeners添加事件的例子:

var win = Ext.create("Ext.Window", {
    title: "ExtJS Window",
    width: 500,
    height: 300,
    listeners: {
        close: function () {
            Ext.MessageBox.alert("提示", "哎呀,我被关闭了!");
        }
    },
    buttons: [
        {
            text: "确定",
            handler: function () {
                this.up("window").close();
            }
        }
    ],
    autoShow: true
});

当我们点击“确定”按钮的时候将关闭窗口,试一下效果吧。

下面来一个通过on方法添加事件的例子:

var win = Ext.create("Ext.Window", {
    title: "ExtJS Window",
    width: 500,
    height: 300,
    buttons: [
        {
            text: "确定",
            handler: function () {
                this.up("window").close();
            }
        }
    ],
    autoShow: true
});

win.on("close", function () {
    Ext.MessageBox.alert("提示", "哎呀,我被关闭了!");
});

好了,这就是ExtJS Window的一些入门级用法,你还有别的不明白?告诉我,我来完善这篇文章。

这篇文章还发布在了我的个人网站上面,链接地址:http://www.qeefee.com/article/extjs-starter-01-window

如果认为此文对您有帮助,别忘了支持一下哦!

作者: 齐飞
声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

转载:http://www.cnblogs.com/youring2/p/extjs-starter-01-window.html
目录
相关文章
|
4月前
|
存储 BI Shell
Doris基础-架构、数据模型、数据划分
Apache Doris 是一款高性能、实时分析型数据库,基于MPP架构,支持高并发查询与复杂分析。其前身是百度的Palo项目,现为Apache顶级项目。Doris适用于报表分析、数据仓库构建、日志检索等场景,具备存算一体与存算分离两种架构,灵活适应不同业务需求。它提供主键、明细和聚合三种数据模型,便于高效处理更新、存储与统计汇总操作,广泛应用于大数据分析领域。
532 2
|
自然语言处理 物联网 图形学
.NET 技术凭借其独特的优势和特性,为开发者们提供了一种高效、可靠且富有创造力的开发体验
本文深入探讨了.NET技术的独特优势及其在多个领域的应用,包括企业级应用、Web应用、桌面应用、移动应用和游戏开发。通过强大的工具集、高效的代码管理、跨平台支持及稳定的性能,.NET为开发者提供了高效、可靠的开发体验,并面对技术更新和竞争压力,不断创新发展。
585 7
|
11月前
|
人工智能 算法
AI+脱口秀,笑点能靠算法创造吗
脱口秀是一种通过幽默诙谐的语言、夸张的表情与动作引发观众笑声的表演艺术。每位演员独具风格,内容涵盖个人情感、家庭琐事及社会热点。尽管我尝试用AI生成脱口秀段子,但AI缺乏真实的情感共鸣和即兴创作能力,生成的内容显得不够自然生动,难以触及人心深处的笑点。例如,AI生成的段子虽然流畅,却少了那份不期而遇的惊喜和激情,无法真正打动观众。 简介:脱口秀是通过幽默语言和夸张表演引发笑声的艺术形式,AI生成的段子虽流畅但缺乏情感共鸣和即兴创作力,难以达到真人表演的效果。
|
监控 Java API
Spring Boot与Camunda的完美融合
【4月更文挑战第20天】
3391 0
|
机器学习/深度学习 存储 人工智能
CDGA|AI时代:企业生产力飙升与数据治理成本轻松降低
AI时代,企业要实现生产力的持续飙升与数据治理成本的有效降低,关键在于推动AI与数据治理的深度融合。这要求企业不仅要加大AI技术的研发投入,培养专业的AI人才团队,还要构建完善的数据治理体系,确保数据的质量、安全与合规性。同时,企业还需积极探索AI与业务流程的深度融合路径,让AI技术真正嵌入到企业的每一个环节中,发挥其最大效用。
CDGA|AI时代:企业生产力飙升与数据治理成本轻松降低
|
安全 数据管理 Shell
Linux命令su详解
`su`命令在Linux中用于切换用户身份,常用于权限管理。它允许用户无须注销当前会话就切换到另一个用户,尤其是root。`su`有多种选项,如`-`或`--login`加载目标用户环境,`-c`执行指定命令后返回。使用时需注意权限安全,建议用`sudo`以减少风险。通过限制`/etc/pam.d/su`可加强访问控制。`su`在系统维护和数据管理中扮演角色,但不直接处理数据。
|
存储 前端开发 JavaScript
vue+elementui+mysql实现个人博客系统
vue+elementui+mysql实现个人博客系统
|
Cloud Native Java Go
解决 Spring Boot 和 Gradle Java 版本兼容性问题:A problem occurred configuring root project ‘demo1‘. > Could n
解决 Spring Boot 和 Gradle Java 版本兼容性问题:A problem occurred configuring root project ‘demo1‘. > Could n
1705 0
|
存储 分布式计算 Hadoop
Hadoop中DataNode故障
【7月更文挑战第11天】
634 1
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
958 4