在上文中,已经将CMD创建的应用程序导入到项目里了,而且也看到默认的主界面了,今天的主要工作就是修改这个主界面,以符合项目的需要。除了设计主界面,还有一些其他的东西需要配置一下。

添加本地化包

打开app.json文件,找到requires,代码如下:

    "requires": [
"font-awesome" ],

以上代码说明项目默认已经引用了Font Awesome的图标,可以在项目中直接使用。这个在项目的后续开发中会经常使用到。

本地化文件从Ext JS 5开始,就已经采用包的方式来提供了,也就是说,在执行sencha app build的时候,会将引用的本地化包也打包到最终的app.js文件中,不再需要在页面中使用SCRIPT标记来另外加载了。

要添加本地化包,需要在requires对应的数组中添加“locale”项,然后添加一个locale配置,用来声明需要引用哪些本地化包,这里只需要引用中文,所以只需要把“zh_CN”作为locale配置的值就行了。

添加本地化包的最终代码如下:

    "requires": [
"font-awesome",
"locale"
], "locale": "zh_CN",

好了,现在执行一次sencha app build重新生成一下应用程序,然后在浏览器中打开应用程序,如果在firebug的网络面板中看到已加载ext-locale-zh_CN.js文件,说明本地化文件已可以正确加载,可以使用了。

主界面设计

从上文最后一张图片可以看到,默认创建的主界面是一个左右结构的界面。研究下app\view\main目录下的Main.js可以清楚的知道,整个界面其实是用标签面板(Ext.tab.Panel)实现的,只不过是将标签放置在了左边而已。这可以说是目前比较流行的一种界面结构了。不过,我还是希望能有一个顶栏用来显示项目名称和退出按钮等东西。

要添加一个顶栏,我比较倾向的方式是使用垂直盒子(VBox)布局来将一个容器划分为上下两个部分,当然,如果习惯使用边框布局(Border)的,也可以用,问题不大,能实现自己所需就行了。

为了实现以上修改,我打算添加一个视区视图,在视区视图内,使用垂直盒子布局来将它划分为上下两个部分,在上半部分,还需要添加一个顶部视图用来控制顶部视图的显示,而下半部分继续使用现在的主视图。

定义主视图

在app/view目录下添加一个名为Viewport.js的文件,然后添加基本的定义代码:

Ext.define('SimpleCMS.view.Viewport', {
extend: 'Ext.container.Container',
requires: [
'Ext.layout.container.VBox',
'Ext.plugin.Viewport',
], layout: {
type: 'vbox',
align: 'stretch'
}, });

由于在Ext JS 6,Viewport类使用了插件的形式来实现,因而这里也遵守这种方式。在这里引用了Ext.layout.container.VBox类,用来实现垂直盒子布局。

在layout配置项中,定义了这里将使用垂直盒子布局,align配置项的作用是告诉父组件,子组件的宽度将填满父组件的宽度。

接下来是添加子组件,代码如下:

    items: [
{
xtype: 'app-header',
height: 65,
id: 'app-header'
},
{
xtype: 'app-main', flex: 1
}
]

尽管顶部视图还没定义,不过还是可以先把app-header作为顶部视图的xtype值。在这里,顶部视图的高度将被定位为65个像素。为顶部视图定义一个id的目的是为了便于编写顶部的视图的样式。

在下半部分,将显示原来的主视图。在这里使用了flex配置项,它的作用是告诉父组件,该子视图的高度将填满父组件减去顶部视图后余下的高度。

定义顶部视图

在app/view目录下创建一个名为header的目录,然后在该目录下添加名字为Main.js的文件。

下面先来定义视图,视图与Ext JS 4版本一样,将使用工具栏来实现,在左边显示项目的标题,在右边显示修改密码和退出按钮,代码如下:

Ext.define("SimpleCMS.view.header.Main",{
extend: "Ext.toolbar.Toolbar", cls: 'toolbar-btn-shadow', xtype: 'app-header', items: [
{ xtype: 'tbtext', text: '简单的CMS系统', id: 'app-header-title' },
'->',
{ tooltip: '修改密码', iconCls: 'x-fa fa-key header-button-color', cls: 'simplecms-header-button', handler: 'onChangePassword' },
{ tooltip: '退出', cls: 'simplecms-header-button', iconCls: 'x-fa fa-sign-out header-button-color', handler: 'onExit' }
]
});

在工具栏内,在左边使用Ext.toolbar.TextItem组件来显示项目标题。为标题定义一个id是为了便于定义样式。

在定义中,“->”表示这里将使用Ext.toolbar.Fill来填充空间,以便实现子组件显示在右边。

在定义的两个按钮中,使用了FONT AWESOME的字体图标来作为图标。FONT AWESOME有许多图标,该如何选择并使用呢?其实很简单,在浏览器中打开http://fontawesome.io/icons/ ,就可以看到在FONT AWESOME中有哪些图标了,当选中一个图标,如car,会在页面中看到如下示例代码:

<i class="fa fa-car" aria-hidden="true"></i>

在代码中的“fa fa-car”就是所需的样式名,在Ext JS 6中使用,只需要在第一fa前添加“x-”就可以了,如类定义代码中的“x-fa fa-key”。

使用FONT AWESOME图标,默认情况下与页面中看到的情形一样,图标都是黑色的,这时候,可以通过样式来改变字体颜色,在上面代码中,样式”header-button-color“就是用来定义字体颜色的。

由于Ext JS的按钮在默认情况下是有背景颜色的,因而在上门代码中,使用了cls配置项来添加一个样式”simplecms-header-button“以便去除背景颜色。

哪为什么要使用cls配置项来去除背景,而不是直接在iconCls中实现呢?如果你研究过一个按钮的HTML实现,就会发现它的结构是这样的:

<a>
<span>
<span>
<span></span>
<span></span>
</span>
</span>
</a>

在这个结构中,A元素是顶级元素,按钮的背景颜色等,是在这一层定义的。而按钮的图标和文字使用最深层的两个SPAN元素来实现的,其中第一个SPAN元素是用来显示图标的,第二个SPAN元素是用来显示文字的。iconCls配置项的作用是定义按钮图标,因而为它定义的样式只会应用于最深层的第一个SPAN元素,这样,在这里添加样式是取消不了按钮的背景颜色的。而cls配置项则不同,它的作用就是用来定义按钮的整体样式的,会将样式应用于A元素。

大家可能注意到,在这里并没有为顶部视图定义它的控制器和视图模型,主要是因为该类比较简单,也不涉及数据绑定,因而只定义一个视图文件就足够了。

为顶部视图添加样式

在顶部视图定义了不少样式,下面来定义这些样式。定义方法与Ext JS 4是一样的。在应用程序目录下有一个sass目录,这个目录就是用来定义样式的。在该目录下有etc、example、src和var这4个目录,其中,src目录是直接用来定义样式的,而var目录就是用来定义样式变量的,具体就是API中所看到CSS Vars中的变量,当然,也可以定义自己的变量,在这里并不需要用到,因而就不展开了。

在src目录下要定义某个视图的样式,首先,要做的就是保持与视图一样的目录结构,如顶部视图的目录结构是view/header,那么在src下,也应该在view/header目录下定义顶部视图的样式。其次,就是文明名除了扩展名外,也必须是相同的,如现在顶部视图的文件名为Main.js,则顶部视图对应的样式文件是Main.sass。

在src/view/header目录下创建Main.sass文件后,添加以下样式代码:

#app-header{
background-color:#6A9A1F;
border-bottom:1px solid #0d1218 !important,
} .toolbar-btn-shadow {
box-shadow: 0 1px 2px rgba(13, 18, 24, 0.2);
} #app-header-title {
color: #fff;
font-size: 18px;
padding: 10px 0 10px;
}
.simplecms-header-button
{
border:none;
background:none;
}
.header-button-color{
color:orange;
}

修改app.js文件

由于在app.js文件中,默认是使用SimpleCMS.view.main.Main作为主视图的,而主视图现在已经修改为SimpleCMS.view.Viewport,因而需要进行修改。

结果

现在执行一次sencha app build,然后刷新浏览器,就应该能看到如下图的效果了。

从图中可以看到,整体效果已经出来了,下一步要做的就是调整下半部视图的显示了,这个下文再说。

Ext JS 6开发实例(三) :主界面设计的更多相关文章

  1. Ext JS 6开发实例(一)

    很久没写文章了,主要原因和大家差不多,都要为生活奔忙,搞了两个小项目.这两个小项目很凑巧,都可以使用Ext JS来开发,这正是练习使用Ext JS 6的好机会,自然不会错过. 很多读者可能会问,为什么 ...

  2. Ext JS 6开发实例(四) :调整主视图

    上文把主界面设置好,但是主视图因为界面的微调出现了显示问题,本文将把它调整好了. 打开app/view/main/Main.js,可以看到主视图是派生于标签面板(Ext.tab.Panel)的.在视图 ...

  3. Ext JS 6开发实例(二) :使用CMD创建应用程序

    由于Ext JS 6将原来的Ext JS和Sencha Touch合并为一个框架,因而在使用CMD来创建应用程序前,需要考虑清楚你是要创建一个通用应用程序,还是仅仅只是针对桌面或移动设备的应用程序. ...

  4. 【转】EXT JS MVC开发模式

    原文链接:EXT JS MVC开发模式 在app(亦即根目录)文件夹下面创建controller.model.store和view文件夹,从名称上就知道他们该放置什么代码了吧.然后创建Applicat ...

  5. 简易音乐播放器主界面设计 - .NET CORE(C#) WPF开发

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. 简易音乐播放器主界面设计 - .NET CORE(C#) WPF开发 阅读导航 本文背景 代码 ...

  6. emWin智能家居主界面设计,含uCOS-III和FreeRTOS两个版本

    第6期:智能家居主界面设计配套例子:V6-910_STemWin提高篇实验_智能家居主界面设计(uCOS-III)V6-911_STemWin提高篇实验_智能家居主界面设计(FreeRTOS) 例程下 ...

  7. Ext JS 5初探(三)

    在上文提到了本地化文件的问题,然后在Ext JS 5的包里找了找,居然还没包含本地化包.我估计目前还不到考虑本地化的时候.在Sencha Touch中,是没有本地化包的,但是要让Ext JS也不包含本 ...

  8. JS模块化开发(三)——seaJs+grunt

    1.seaJs直接构建存在的问题 由于模块之间的依赖require引用的是模块名,当多个js模块被合并成一个时,会由于找不到模块名而报错 2.seaJs+grunt开发 用到的插件:grunt-cmd ...

  9. Winform开发框架主界面设计展示

    做了好多年Winform的程序的开发,主窗口的界面设计一般都要求做的更好一些,可以根据不同的系统功能模块进行归类整合,能使客户迅速寻找到相关功能的同时,也能感觉到整体性的美观大方,因此主窗口的界面设计 ...

随机推荐

  1. Java文件操作(新建,遍历,删除)

    //创建文件 private static void createFile(File file){ try { if(!file.exists()){ if(file.getParentFile() ...

  2. C语言程序设计第六次作业——循环结构(2)

    C语言程序设计第六次作业--循环结构(2) 之前的博客园图片没处理好,对大家说一声抱歉.希望大家能够多多指出我的错误,我来认真修改 ^ - ^ !. (1)改错题 序列求和:输入一个正实数eps,计算 ...

  3. SpringMVC注解@Component、@Repository、@Service、@Controller区别

    SpringMVC中四个基本注解: @Component.@Repository   @Service.@Controller 看字面含义,很容易却别出其中三个: @Controller   控制层, ...

  4. Js删除数组函数

    引用地址:http://www.398588.com/Article/T8/96.aspx 众所周知大家都应该知道delete的用法,用来删除对象或者删除数组等,如果是删除对象除数组以外可能可以删除的 ...

  5. Oracle中时间和日期函数总结

    查看当前日期格式:select * from nls_session_parameters where parameter='NLS_DATE_FORMAT'; 修改日期的格式: alter sess ...

  6. AnyConnect使用说明(电脑版Windows)

    一.下载客户端 Anyconnect支持Windows.Mac电脑. 二.安装 1.双击打开下载的文件,点“Next”开始安装. 2.选择“I accept …”,再点下一步. 3.点“Install ...

  7. windows系统和centos双系统安装引导项修改

    在CentOS下修改Linux引导文件:     (1)找到win10的引导 1.首先我们点击第一个系统进入centos           2.运行终端,敲入命令su,为了获取管理员权限,然后终端提 ...

  8. getParameter的用法总结

    getParameter得到的都是String类型的.或者是用于读取提交的表单中的值(http://a.jsp?id=123中的123),或者是某个表单提交过去的数据: getAttribute则可以 ...

  9. 亲密接触Redis-第三天(Redis的Load Balance)

    前言 上两天讲述了Redis的基本搭建和基于HA的集群布署方式以及相关的策略和注意点.今天开始讲述Redis的Cluster功能,而这块目前来说网上资料不是太全,就算有1,2篇也只是单讲服务端的搭建也 ...

  10. 20160216.CCPP体系详解(0026天)

    程序片段(01):01.MemCpy.c 内容概要:内存拷贝 #include <stdio.h> #include <stdlib.h> #include <memor ...