Extjs4 ——布局和容器

2024-06-02 00:38
文章标签 布局 容器 extjs4

本文主要是介绍Extjs4 ——布局和容器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

extjs4.0布局及容器系统(Layouts and Containers)是Ext JS中最强大的部分之一。它负责控制你应用程序中每个组件的尺寸和定位。本文内容包括了如何运用布局的基础。

extjs4.0布局和容器(Layouts and Containers)是Ext JS中最强大的部分之一。它负责控制你应用程序中每个组件的尺寸和定位。本文内容包括了如何运用布局的基础。

一、容器

一个Ext JS应用程序的图形用户界面(UI)是由许多组件(查看组件指南(Components Guide)获取更多关于组件的信息)构成的。容器是一种可以容纳一些其他组件的特殊类型组件。

典型的Ext JS应用程序是由一些嵌套的组件构成不同的层来组成的。如下:

 

最通用的容器就是Panel。让我们看下如何创建一个容器以允许一个Panel包含其他的组件:

Ext.onReady(function(){Ext.create('Ext.panel.Panel', { renderTo: Ext.getBody(), width: 400, height: 300, title: 'Container Panel', items: [ { xtype: 'panel', title: 'Child Panel 1', height: 100, width: '75%' }, { xtype: 'panel', title: 'Child Panel 2', height: 100, width: '75%' } ] });
});

我们刚刚创建了一个Panel,并把它渲染到DOM的body中,然后我们使用items配置项添加两个子Panel到我们的Panel容器中。
二、布局
每个容器都拥有一个布局来管理它子组件的尺寸和定位。
下面我们将讨论如何使用指定类型的布局来配置容器,以及布局系统是如何使每个组件都保持协调的。
使用布局:上面例子中我们没有为Panel容器指定布局。可以看到子Panel是一个接着一个被放置的,正如DOM中标准的块元素一样。
我们刚刚创建了一个Panel,并把它渲染到DOM的body中,然后我们使用items配置项添加两个子Panel到我们的Panel容器中。

之所以这样是因为所有容器的默认布局为自动布局。自动布局并不为子元素指定任何特殊的定位和尺寸规则。
例如,我们假定想让两个子Panel并排放置,并且每个占据父容器宽度的50%,我们可以简单
地使用一个列布局(Column Layout),通过在父容器中配置layout选项来实现。
Ext.onReady(function(){Ext.create('Ext.panel.Panel', { renderTo: Ext.getBody(), width: 400, height: 200, title: 'Container Panel', layout: 'column', items: [ { xtype: 'panel', title: 'Child Panel 1', height: 100, width: '50%' }, { xtype: 'panel', title: 'Child Panel 2', height: 100, width: '50%' } ] }); 
});

 
Ext JS拥有一整套可用的布局,几乎容纳了你能想象到的任何一种布局。可以查看布局的例子(Layout Examples)以了解那些布局是可行的。
 
布局系统是如何工作的呢?
父容器的布局负责其所有子元素的初始定位和尺寸大小。框架内部调用了容器的doLayout方法,
该方法触发布局为父容器的所有子元素计算得到正确的尺寸和定位并更新DOM。doLayout方法
是递归调用的,所以父容器的任何子元素同样也将会调用它们的doLayout方法。这种调用将持续到到达组件层次的末端。通常你一般不会在你的应用程序代码中调用doLayout方法,因为框架已为你调用了。
父容器的改变尺寸时,或当添加或删除子组件的items时,重新布局将被触发。通常,我们仅依赖框架为我们管理以更新布局,但是有时我们想阻止框架自动更新布局,这样我们一次可以批量
地处理多个操作,完成时,我们手动地触发布局。
为了到达这个目的,我们在容器中使用延缓布局(suspendLayout)标志以阻止它自动布局,当我们执行那些通常会触发布局的操作时(例如添加或移除items)。
当我们做完这些操作时,我们必须把延缓布局标志关闭,并且手动地调用容器的doLayout方法以触发布局:
 
Ext.onReady(function(){var containerPanel = Ext.create('Ext.panel.Panel', { renderTo: Ext.getBody(), width: 400, height: 200, title: 'Container Panel', layout: 'column', suspendLayout: true // Suspend automatic layouts while we do several different things that could trigger a layout on their own //当我们做一些能触发其自动布局的操作时,保证延缓其能自动布局。 }); // Add a couple of child items.  We could add these both at the same time by passing an array to add(), //添加一对子items。我们可以通过调用add()并传递一个数组一次性添加这两个子组件, // but lets pretend we needed to add them separately for some reason. //但是我们假定需要分别地添加它们是因为其他原因。 containerPanel.add({ xtype: 'panel', title: 'Child Panel 1', height: 100, width: '50%' }); containerPanel.add({ xtype: 'panel', title: 'Child Panel 2', height: 100, width: '50%' }); // Turn the suspendLayout flag off. //关闭延缓布局标志 containerPanel.suspendLayout = false; // Trigger a layout. //触发布局 containerPanel.doLayout(); });

 
组件布局
如容器的布局定义了一个容器如何设定尺寸和定位它的组件items,组件的布局同样也定义了
其如何设定尺寸和定位它内部的子items。
组件的布局通过使用组件布局(componentLayout)来设置配置选项。一般你不需要使用该配置项,除非你正在编写一个自定义的组件,因为所有提供的组件其内部元素的大小调整和定位都拥有它们自己的布局管理器。
大多数组件使用自动布局(Auto Layout),但是更多复杂的组件需要自定义的组件布局方式(例如一个有header,footer,toolbars的Panel)

关于更多详细Ext布局请参考 EXT4布局详解




这篇关于Extjs4 ——布局和容器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1022556

相关文章

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

Apache Tiles 布局管理器

陈科肇 =========== 1.简介 一个免费的开源模板框架现代Java应用程序。  基于该复合图案它是建立以简化的用户界面的开发。 对于复杂的网站,它仍然最简单,最优雅的方式来一起工作的任何MVC技术。 Tiles允许作者定义页面片段可被组装成在运行一个完整的网页。  这些片段,或Tiles,可以用于为了降低公共页面元素的重复,简单地包括或嵌入在其它瓦片,制定了一系列可重复使用