ExtJS 高频面试题及详细答案(实战版)_第1页
ExtJS 高频面试题及详细答案(实战版)_第2页
ExtJS 高频面试题及详细答案(实战版)_第3页
ExtJS 高频面试题及详细答案(实战版)_第4页
ExtJS 高频面试题及详细答案(实战版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ExtJS高频面试题及详细答案(实战版)一、基础概念类(入门必考)1、简单说说你对ExtJS的理解,它的核心特点是什么?详细答案:ExtJS是一款基于JavaScript开发的富客户端UI框架,主打企业级后台管理系统开发,适配PC端复杂表单、表格、弹窗、布局等场景。和原生JS、jQuery相比,它最大的优势是封装了完整的组件体系和布局机制,不用自己手写大量DOM操作和样式。核心特点主要有五点:1.组件化编程:页面所有元素都是组件,比如按钮、输入框、表格、面板,支持复用、嵌套、销毁,代码结构性极强;2.完整布局系统:内置border、fit、column、accordion、card等多种布局,快速实现复杂页面排版,适配窗口大小自适应;3.MVC/MVVM架构:高版本ExtJS支持分层架构,分离视图、数据、逻辑,便于大型项目维护;4.数据驱动:通过Store、Model统一管理数据,表格、下拉框等组件直接绑定数据源,减少手动渲染代码;5.兼容性强、封装完善:内置表单校验、弹窗、提示、分页、排序筛选等通用功能,开箱即用,不用重复造轮子。2、ExtJS中Component、Container、Panel的区别和联系?详细答案:这三者是层层继承、逐级扩展的关系,是ExtJS组件体系的核心:1.Component(组件基类):所有页面组件的顶层父类,是最基础的单元。按钮、输入框、表格、面板等所有组件都继承自它。它定义了组件通用属性和方法,比如渲染、隐藏、显示、销毁、宽高设置等,本身不具备容纳子组件的能力。2.Container(容器类):继承自Component,是可以存放子组件的特殊组件。新增了布局管理、子组件增删、查找、遍历等功能,是所有容器组件的父类,比如面板、窗口、标签页都属于容器。3.Panel(面板):继承自Container,是项目中最常用的容器组件。在容器基础上扩展了标题栏、工具栏、底部栏、边框、折叠、刷新等业务常用功能,绝大多数页面布局、模块搭建都基于Panel实现。简单总结:Panel是Container的子类,Container是Component的子类;组件分两类,一类是纯展示/交互组件(按钮、输入框),一类是容器组件(Panel、Window)。3、ExtJS中render渲染过程简单说明?详细答案:ExtJS组件不会直接拼接DOM字符串,而是有一套固定的渲染生命周期,核心流程如下:1.初始化配置:创建组件实例,加载用户配置的属性、事件、样式;2.初始化模板:组件根据自身类型,加载内置的HTML模板和样式;3.生成DOM结构:框架自动创建对应的DOM节点,绑定默认样式;4.绑定事件:将组件配置的点击、改变、渲染完成等事件绑定到DOM上;5.渲染子组件:如果是容器组件,遍历子组件,依次执行渲染流程;6.执行渲染完成事件:触发afterrender事件,开发者可以在这个钩子中做组件初始化操作。注意:组件在未渲染完成时,无法获取DOM和组件内部属性,所有DOM相关操作必须写在afterrender事件中。二、布局系统类(高频实操)4、常用的ExtJS布局有哪些?分别适用什么场景?详细答案:项目中最常用的5种布局,场景区分非常明确:1.fit布局(自适应布局):容器内只能放一个子组件,子组件自动铺满整个容器。常用于页面主内容区、弹窗主体内容展示。2.border布局(边框布局):将页面分为north、south、west、east、center五个区域,center区域自动占满剩余空间。是后台系统首页框架标配布局,用于顶部导航、底部版权、左侧菜单、右侧主内容的结构。3.column布局(列布局):将容器按列划分,可设置每列宽度(固定值或百分比),适合多列表单、并排模块场景,缺点是不自适应高度,适合简单静态排版。4.accordion布局(手风琴布局):容器内子组件折叠展示,同一时间只有一个面板展开,其余收起。最常用于左侧侧边栏菜单、分类列表。5.card布局(卡片布局):容器内多个组件层级重叠,同一时间只显示一个,可切换展示。常用于步骤表单、标签页切换、弹窗多页面切换场景。5、border布局中center区域必须存在吗?有什么注意事项?详细答案:必须存在,border布局中center区域是核心必填区域,否则布局会直接报错、页面无法正常渲染。核心注意点:1.center区域不能设置宽高,会自动填充五个区域之外的剩余空间;2.north、south只能设置高度,宽度自适应;west、east只能设置宽度,高度自适应;3.可通过split:true设置区域可拖拽拉伸,collapsible:true设置区域可折叠;4.一个页面只能有一个border根布局,子容器不建议嵌套border布局,容易出现布局错乱。三、数据层(Store、Model核心)6、ExtJS中Model、Store、Proxy的关系是什么?详细答案:三者是数据流转的完整闭环,分工明确:1.Model(数据模型):定义数据结构,相当于实体类。配置字段名称、字段类型、默认值、校验规则、映射字段,统一规范数据格式,避免字段混乱。2.Store(数据集):数据仓库,是Model的集合。负责承载页面展示的所有数据,提供分页、排序、筛选、增删改查、刷新等方法,所有数据组件(表格、下拉框)都绑定Store展示数据。3.Proxy(代理):数据请求中介,负责Store和后端的交互。分为内存代理、ajax代理、jsonp代理等,常用AjaxProxy,配置请求地址、请求方式、参数、返回值解析规则。完整流程:Store加载数据时,调用Proxy发送后台请求,后端返回数据后,Proxy按照Model规则解析数据,封装成Model实例存入Store,组件再从Store取数渲染页面。7、Store的load方法和reload方法有什么区别?详细答案:两个方法都是刷新数据,核心区别在请求参数和分页状态:1.load():用于首次加载数据、手动传参加载。会重置分页页码为第一页,支持自定义传入参数,覆盖原有请求参数。常用于页面初始化加载、条件查询。2.reload():用于刷新当前页面数据。会保留当前分页页码、每页条数、原有查询参数,只重新请求当前页数据。常用于新增、编辑、删除数据后,刷新列表不重置页码。简单总结:查询条件切换用load,操作后刷新当前页用reload。8、ExtJS表格Grid数据不刷新、不更新的常见原因及解决办法?详细答案:实战中最常见的5种问题及解决方案:1.Store没有重新加载:修改数据后只修改本地变量,未调用store.reload()/store.load(),页面不会更新。解决:数据操作完成后主动刷新Store。2.后台返回数据格式不匹配:未配置reader,返回的数组层级不对,Store无法解析数据。解决:在Proxy中配置jsonReader,指定root、totalProperty字段。3.组件重复渲染、Store实例复用混乱:弹窗多次打开重复创建Store实例,新旧实例冲突。解决:全局单例Store,每次打开弹窗只刷新数据,不重复创建。4.分页参数未同步:修改数据后页码未重置,reload读取旧页码数据。解决:新增数据后用loadPage(1)重置首页,编辑删除用reload。5.本地数据缓存未清空:Store本地留存旧数据,新数据覆盖失败。解决:加载前执行store.removeAll()清空旧数据。四、表单组件类9、ExtJS表单Form的loadRecord和setValues区别?详细答案:两个方法都用于表单回显数据,核心区别在数据绑定和提交状态:1.setValues():接收普通JSON对象,仅做页面回显,不会绑定原始数据。表单修改后,无法直接获取原始数据,适合简单静态回显。2.loadRecord():接收Model实例,会将表单与该数据模型双向绑定。不仅回显数据,还会记录原始数据,可通过getRecord()获取原始数据,方便对比修改前后差异,适合编辑表单场景。实战建议:新增表单用setValues,编辑表单必须用loadRecord,保证数据溯源准确。10、ExtJS表单提交submit方法和ajax手动提交区别?详细答案:1.form.submit():框架封装的原生提交方法,自动收集表单所有字段数据,自动触发表单校验(必填、正则、长度校验),校验不通过直接阻止提交,无需手动判断。缺点是自定义请求逻辑、请求头、参数处理不够灵活。2.手动Ajax提交:通过Ext.Ajax.request手动获取表单值、组装参数、发送请求。灵活性极高,可自定义请求头、动态处理参数、批量提交、混合其他数据。缺点是需要手动触发表单校验,代码量更多。实战场景:简单新增、编辑表单用submit;复杂参数组装、文件上传、批量操作、特殊请求配置用手动Ajax。五、进阶原理与性能问题11、ExtJS组件懒加载原理是什么?详细答案:ExtJS默认不是一次性渲染所有组件,而是采用按需渲染、延迟渲染机制,也就是懒加载。核心原理:1.页面初始化只渲染可视区域的组件,隐藏的弹窗、未激活的标签页、折叠面板,仅创建组件实例,不生成DOM;2.当组件首次触发显示、切换、展开动作时,才会执行render渲染流程,生成DOM结构;3.渲染完成后组件会缓存DOM,后续切换、显示无需重新渲染,提升操作速度。优势:大幅减少首屏DOM节点数量,降低页面初始化压力,提升复杂后台系统的首屏加载速度。12、ExtJS项目常见的性能卡顿问题怎么优化?详细答案:实战中6个核心优化手段,针对性解决卡顿、加载慢、操作延迟问题:1.开启表格虚拟滚动:大数据列表(上千条以上)开启bufferedRenderer虚拟渲染,只渲染可视区域行数据,避免一次性渲染所有DOM,解决表格卡顿;2.统一组件实例,避免重复创建:弹窗、下拉框、表格等组件全局单例,只销毁数据,不销毁组件,避免频繁创建销毁实例造成的性能消耗;3.分页加载数据:禁止一次性请求所有数据,后端分页+前端Store分页,减少单次数据渲染量;4.及时销毁无用组件:关闭弹窗、切换页面时,对临时组件执行destroy销毁,避免DOM堆积、内存泄漏;5.简化组件嵌套层级:减少多层Panel嵌套,层级过深会加重布局渲染计算压力,尽量扁平化布局;6.延迟执行耗时操作:窗口自适应、数据渲染等耗时逻辑放在afterrender或defer延迟执行,避免阻塞主线程。13、ExtJS中destroy和remove的区别?详细答案:1.remove():仅将子组件从容器中移除,删除对应的DOM节点,但组件实例依然存在内存中,可以再次添加到容器中复用,不会销毁组件对象。2.destroy():彻底销毁组件,删除DOM、清空事件监听、释放内存、销毁组件实例,销毁后组件无法再次使用,彻底杜绝内存泄漏。实战规范:临时弹窗、动态创建的组件,关闭后必须destroy;需要反复切换复用的组件,使用remove移除即可。六、面试高频实操问答题14、如何实现ExtJS表格单选/多选、行选中、获取选中行数据?详细答案:1.配置选择列:表格中添加selModel配置,单选设置singleSelect:true,多选设置singleSelect:false;2.获取选中单行:grid.getSelectionModel().getSelection()[0],适用于单选场景;3.获取所有选中行:grid.getSelectionModel().getSelection(),返回选中行Model数组,适用于多选场景;4.获取行数据:通过model.getData()即可拿到该行所有字段的键值对数据。注意:操作选中数据前,需要判断是否有选中行,避免数组为空报错。15、ExtJS页面自适应错乱的常见原因和解决方式?详细答案:常见原

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论