《Ext JS实战》——1.6 测试

简介: 在这个配置对象中,把id设为'myWindow',以后Ext.getCmp方法就可以根据这个id找到这个窗口。接着又指定了这个窗口的标题,标题会以蓝色字体显示在窗口的最顶部区域,也就是叫做标题栏的地方。

本节书摘来自异步社区《Ext JS实战》一书中的第1章,第1.6节,作者:【美】Jesus Garcia著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.6 测试

在这个练习中,要创建一个Ext JS的Window,然后通过Ajax请求一个HTML文件,并把文件的内容展现在Window的内容区域。现在从创建主HTML文件开始,然后是所有的JavaScript文件。

代码1-1 创建helloWorld.html

screenshot

代码1-1是典型的只有Ext配置的HTML标记,包含了合并版的CSS文件,ext-all-css1和两个必须的JavaScript文件ext-base.js和ext-all-debug.js2。接着,又创建了一个JavaScript块3,这里对重要的Ext.BLANK_IMAGE_URL属性进行了设置。最后,把很快就要创建的helloWorld.js文件包括进来4。

你可能还没注意到,对于框架的引用使用的是绝对路径的方式。如果路径不一样,一定要改过来。接下来,要创建helloWorld.js这个文件,这个文件会包含主要的JavaScript代码。

代码1-2 创建helloWorld.js

screenshot

在代码1-2中,创建了buildWindow函数,这个函数又被传递给Ext.onReady以备稍后执行。在buildWindow中,创建了一个新的Ext.Window实例1,并通过win引用这个实例。给Ext.Window传递了一个配置对象,这个对象中包括了初始化窗口实例所需要的一切配置属性。

在这个配置对象中,把id设为'myWindow',以后Ext.getCmp方法就可以根据这个id找到这个窗口。接着又指定了这个窗口的标题,标题会以蓝色字体显示在窗口的最顶部区域,也就是叫做标题栏的地方。接下来,指定了窗口的高度和宽度。然后把layout设置成'fit',这可以保证不管这个窗口中放的是什么内容,这个内容都会填满窗口的内容空间。我们又继续指定了一个autoLoad配置对象2,这个对象通知窗口自动取出一个HTML片段内容(通过url属性指定的),如果里面有JavaScript,还会运行这些代码(通过scripts:true指定)。

HTML片段(HTML fragments)
所谓HTML片段就是没有用head和body标签包围起来的HTML,因此不会被认为是一个完整的页面。Ext JS之所以要加载HTML片段,是因为一个页面中只能有一个HEAD和BODY标签。1
完成了Ext.Window实例的配置对象之后,接下来,又调用了win.show3,这个方法是渲染窗口。这些就是对buildWindow内容的总结。最后一件事就是调用Ext.onReady4并把buildWindow方法传进去。这可以保证在正确的buildWindow,也就是在DOM完全就绪之后并且在获取任何图像之前执行。下面看看窗口是怎么渲染的。在浏览器打开helloWorld.html。如果之前的所有代码都正确,应该看到图1-19所示的一个窗口,在“Loading…”文本旁边会有一个转动的图标,这个图标其实是加载指示符,表示数据还在加载中。

screenshot

为什么会看到这个消息呢?这是因为还没有sayHi.html页面,在autoLoad配置对象的url属性中指向的就是这个页面。事实上,这里是在让Ext JS加载某些还不存在东西。接下来,就要处理这个sayHi.html了,下面会在这个文件中建一个HTML片段,其中还会包含一些JavaScript。

代码1-3 创建sayHi.html

screenshot

在代码1-3中,创建的是一个带有HTML片段的文件sayHi.html。这个片段中有一个DIV1,“Hello world”消息就放在这里。接着,又用了一个script标签和一些JavaScript代码,浏览器加载这个片段时就会运行这段代码。在这部分代码中,创建了一个名为highlightWindow的新函数2,这个函数会延迟一秒执行。在函数内部,对窗口的内容区域执行了一个highlight的效果。highlightWindow的执行延迟一秒3。这个方法是这么工作的。

首先通过使用一个名为Ext.getCmp的辅助方法取得在helloWorld.js文件中创建的Window的引用,Ext.getCmp根据id查找Ext JS组件。在创建这个窗口时给它的id是'myWindow',传给Ext.getCmp的就是这个id。之所以能够这么做,是因为所有的组件(部件)在初始化时都会用ComponentMgr进行注册。在程序的任何地方都可以通过Ext.getCmp根据id得到引用。

在得到了窗口的引用之后,又用窗口的body属性得到了窗口内容区的引用,winBody。然后调用它的高亮方法,这个方法会对元素进行高亮操作(从黄色渐变成白色)。这些内容就是对highlightWindow方法的总结。

这段JavaScript代码块所做的最后一件事就是调用highlightWindow.defer使用的值是1000,这会让highlightWindow的执行延迟1000毫秒(或者1秒)。

如果说从来没听说过JavaScript中有个defer,不要紧,因为这是个Ext引入的方法。Ext JS利用了JavaScript的可扩展性对一些核心的语言类,例如Array、Date、Function、Number、String添加了许多好用的方法。这就意味着这些类的每个实例都有了新的好用的方法。就这个例子而言,用到的是defer,它是Function的一个扩展。如果经验足够丰富,可能会问,“为什么不用setTimeout呢?”。第一个原因是因为更简单,调用任何方法的.defer,然后传入一个时间就可以延迟其执行。第二个原因是因为可以对被延迟执行的方法执行的作用域进行控制,并传入定制的参数,这也是setTimeout所欠缺的。

现在就可以结束这个HTML片段了,Window也能取到这个片段了。刷新helloWorld.html后,可以看到如图1-20所示的内容。

screenshot

图1-20 Ext JS Window加载 HTML片段(左)对内容区使用高亮效果

如果一切正确,看到的结果也应该与图1-20一样,首先内容区域会用HTML片段更新(左),经过1秒钟之后,窗口的内容区域会用黄色高亮显示(右)。很酷吧?建议你花些时间调整一个这个例子,例如用API修改高亮效果的颜色。提示一下:从Ext JS > Fx下载有效果的列表以及对应的参数。

相关文章
|
5月前
|
测试技术 持续交付 UED
软件测试的艺术:确保质量的实战策略
在软件开发的舞台上,测试是那把确保每个功能如交响乐般和谐奏响的指挥棒。本文将深入探讨软件测试的重要性、基本类型以及如何设计高效的测试策略。我们将通过一个实际的代码示例,展示如何运用这些策略来提升软件质量和用户体验。
|
3月前
|
存储 安全 API
Next.js 实战 (九):使用 next-auth 完成第三方身份登录验证
这篇文章介绍了next-auth,一个为Next.js设计的身份验证库,支持多种认证方式,如电子邮件和密码、OAuth2.0提供商(如Google、GitHub、Facebook等)以及自定义提供商。文章包含了如何配置Github Provider以及会话管理,并提到了适配器Adapters在next-auth中的作用。最后,文章强调了next-auth的强大功能值得进一步探索。
222 10
|
2月前
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
83 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
1月前
|
监控 JavaScript 前端开发
MutationObserver详解+案例——深入理解 JavaScript 中的 MutationObserver:原理与实战案例
MutationObserver 是一个非常强大的 API,提供了一种高效、灵活的方式来监听和响应 DOM 变化。它解决了传统 DOM 事件监听器的诸多局限性,通过异步、批量的方式处理 DOM 变化,大大提高了性能和效率。在实际开发中,合理使用 MutationObserver 可以帮助我们更好地控制 DOM 操作,提高代码的健壮性和可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
MutationObserver详解+案例——深入理解 JavaScript 中的 MutationObserver:原理与实战案例
|
1月前
|
数据可视化 JavaScript 前端开发
从Postman到Apipost:我的动态参数测试实战踩坑记
作为一名全栈开发工程师,在开发用户中心模块时,我遇到了复杂参数API测试的挑战。最初使用Postman时,发现其在生成动态参数(如邮箱、手机号和日期)时存在诸多问题,导致测试效率低下甚至出错。例如,随机生成的邮箱格式无效等 后来,CTO推荐了Apipost,它提供了更智能的参数生成方式:支持真实邮箱、符合规范的手机号以及合法日期范围,极大提升了测试效率和准确性。通过对比,Apipost在处理复杂动态参数方面明显优于Postman,减少了维护成本并提高了团队协作效率。现在,我们已全面切换到Apipost,并利用其「参数组合测试」功能发现了多个边界条件bug。
|
1月前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
|
2月前
|
存储 数据可视化 测试技术
一个测试工程师的实战笔记:我是如何在Postman和Apipost之间做出选择的?
优秀的API测试工具应该具备: 分层设计:既有可视化操作,也开放代码层深度定制 场景感知:自动识别加密需求推荐处理方案 协议包容:不强迫开发者为了不同协议切换工具 数据主权:允许自主选择数据存储位置
75 7
|
3月前
|
设计模式 数据安全/隐私保护
Next.js 实战 (七):浅谈 Layout 布局的嵌套设计模式
这篇文章介绍了在Next.js框架下,如何处理中后台管理系统中特殊页面(如登录页)不包裹根布局(RootLayout)的问题。作者指出Next.js的设计理念是通过布局的嵌套来创建复杂的页面结构,这虽然保持了代码的整洁和可维护性,但对于特殊页面来说,却造成了不必要的布局包裹。文章提出了一个解决方案,即通过判断页面的skipGlobalLayout属性来决定是否包含RootLayout,从而实现特殊页面不包裹根布局的目标。
160 33
|
3月前
|
中间件 API
Next.js 实战 (八):使用 Lodash 打包构建产生的“坑”?
这篇文章介绍了作者在使用Nextjs15进行项目开发时遇到的部署问题。在部署过程中,作者遇到了打包构建时的一系列报错,报错内容涉及动态代码评估在Edge运行时不被允许等问题。经过一天的尝试和调整,作者最终删除了lodash-es库,并将radash的部分源码复制到本地,解决了打包报错的问题。文章最后提供了项目的线上预览地址,并欢迎读者留言讨论更好的解决方案。
86 10
|
4月前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
1334 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告

热门文章

最新文章

下一篇
oss创建bucket