Container控件是我们在实际开发中最常用的控件,大部分视图控件都是继承于Container控件,了解此控件能帮我们更好的了解sencha touch。

layout是一个很重要的属性,能够帮助你进行布局。

layout的基本用法可见:http://www.cnblogs.com/html5mob/archive/2012/07/10/2583248.html

了解了基本用法之后,我们可以用此实现复杂的布局,比如九宫格布局。

代码如下:

  1. Ext.define('app.view.layout.Squared', {
  2. alternateClassName: 'layoutSquared',
  3. extend: 'Ext.Container',
  4. xtype: 'layoutSquared',
  5. config: {
  6. title: '九宫格',
  7. cls: 'home',
  8. layout: 'vbox',
  9. defaults: {
  10. flex: 1,
  11. layout: {
  12. type: 'hbox',
  13. align: 'center'
  14. },
  15. defaults: {
  16. xtype: 'button',
  17. iconAlign: 'top',
  18. flex: 1
  19. }
  20. },
  21. items: [{
  22. items: [{
  23. text: '按钮1',
  24. iconCls: 'squared orangeYellow'
  25. },
  26. {
  27. text: '按钮2',
  28. iconCls: 'organize orange'
  29. },
  30. {
  31. text: '按钮3',
  32. iconCls: 'add roseRed'
  33. }]
  34. },
  35. {
  36. items: [{
  37. iconCls: 'refresh lightBlue',
  38. text: '按钮4'
  39. },
  40. {
  41. iconCls: 'search green',
  42. text: '按钮5'
  43. },
  44. {
  45. iconCls: 'star yellow',
  46. text: '按钮6'
  47. }]
  48. },
  49. {
  50. items: [{
  51. iconCls: 'trash paleYellow',
  52. text: '按钮7'
  53. },
  54. {
  55. iconCls: 'maps smBlue',
  56. text: '按钮8'
  57. },
  58. {
  59. iconCls: 'action',
  60. text: '按钮9'
  61. }]
  62. }]
  63. }
  64. });

layout: 'vbox'表示垂直布局,作用于21行所指的items,其内的项将垂直布局。

  1. defaults: {
  2. flex: 1,
  3. layout: {
  4. type: 'hbox',
  5. align: 'center'
  6. },
  7. defaults: {
  8. xtype: 'button',
  9. iconAlign: 'top',
  10. flex: 1
  11. }
  12. }

上面的代码中,第一行的defaults表示为22,36,50这三个items指定默认属性。

flex: 1表示以上3个items所占用空间都是1,意思是相同大小,所以他们各占1/3的空间。

  1. layout: {
  2. type: 'hbox',
  3. align: 'center'
  4. }

以上代码表示3个items之中的元素布局为横向布局,并且居中显示。

  1. defaults: {
  2. xtype: 'button',
  3. iconAlign: 'top',
  4. flex: 1
  5. }

以上代码表示3个items之中按钮的默认配置,其中flex: 1表示每个按钮占用空间为1。

通过如此布局就能够让每个按钮都占用相同的空间,并且能够适应大部分的手机屏幕。

所用css:

  1. .home .x-button .x-button-label {
  2. font-weight:normal;
  3. color:#3F444A;
  4. font-size:.7em;
  5. }
  6. .home .x-button .x-button-icon {
  7. font-size:1.5em;
  8. }
  9. .home .x-button {
  10. background:none;
  11. border:;
  12. }
  13. /*#region 字体颜色 */
  14. .orangeYellow {
  15. color:#F37E0B;
  16. }
  17. .orange {
  18. color:#ED5F12;
  19. }
  20. .roseRed {
  21. color:#DE3554;
  22. }
  23. .lightBlue {
  24. color:#2C94B1;
  25. }
  26. .green {
  27. color:#7DB13A;
  28. }
  29. .blue {
  30. color:#4C93C2;
  31. }
  32. .yellow {
  33. color:#F19300;
  34. }
  35. .paleYellow {
  36. color:#F3B428;
  37. }
  38. .smBlue {
  39. color:#45ADB9;
  40. }
  41. .yellowish {
  42. color:#B15F2E;
  43. }
  44. .gray {
  45. color:gray;
  46. }
  47. /*#endregion*/

效果图如下:

九宫格不是唯一的布局方式,我们还可以这样,代码:

  1. Ext.define('app.view.Home', {
  2. alternateClassName: 'home',
  3. extend: 'Ext.Container',
  4. xtype: 'home',
  5. config: {
  6. title: '首页',
  7. cls: 'home',
  8. layout: 'vbox',
  9. defaults: {
  10. height: '4.5em',
  11. layout: 'hbox',
  12. defaults: {
  13. xtype: 'button',
  14. iconAlign: 'top',
  15. flex: 1
  16. }
  17. },
  18. items: [{
  19. items: [{
  20. text: '九宫格',
  21. iconCls: 'squared orangeYellow'
  22. },
  23. {
  24. text: '面板',
  25. iconCls: 'organize orange'
  26. },
  27. {
  28. text: '列表',
  29. iconCls: 'list roseRed'
  30. },
  31. {
  32. iconCls: 'refresh lightBlue',
  33. text: '个人中心'
  34. }]
  35. },
  36. {
  37. items: [{
  38. iconCls: 'search green',
  39. text: '按钮5'
  40. },
  41. {
  42. iconCls: 'settings blue',
  43. text: '按钮6'
  44. },
  45. {
  46. iconCls: 'star yellow',
  47. text: '按钮7'
  48. },
  49. {
  50. iconCls: 'trash paleYellow',
  51. text: '按钮8'
  52. }]
  53. },
  54. {
  55. width: '25%',
  56. items: [{
  57. iconCls: 'maps smBlue',
  58. text: '按钮9'
  59. }]
  60. }]
  61. }
  62. });

相对于九宫格布局,我们做了以下修改

  1. defaults: {
  2. height: '4.5em',
  3. layout: 'hbox',
  4. defaults: {
  5. xtype: 'button',
  6. iconAlign: 'top',
  7. flex: 1
  8. }
  9. }

第二行的flex变成了height,这样每行按钮所占高度不再是1/3而是固定的4.5em。

布局其他属性不变,但是3个items中按钮变成了4,4,1。

第三个items额外添加了width: '25%'属性,因为它里面只有一个按钮,按钮会完全占据它的空间,所以我们把宽度设置为25%。

css同九宫格中所用css

效果如下:

layout的可配置属性card值得注意,我们一般利用这种布局来进行页面切换,官方NavigationView控件便是由此而来。

基本原理是利用Container控件的add,romove方法动态添加删除项,用以控制内存占用等,然后通过setActiveItem方法显示指定项。

另外还有data,tpl,tplWriteMode,plugins属性值得注意,我们常用的list控件便是利用他们扩展出来的。

  1. /*
  2. *个人中心
  3. */
  4. Ext.define('app.view.user.Info', {
  5. alternateClassName: 'userInfo',
  6. extend: 'Ext.Container',
  7. xtype: 'userInfo',
  8. requires: ['ux.plugin.ConTpl'],
  9. config: {
  10. cls: 'info',
  11. title: '个人中心',
  12. plugins: 'conTpl',
  13. tpl: new Ext.XTemplate(
  14. '<div class="bgdiv divline bh">',
  15. '<div class="bgimg x-button" style="background:url({pic});" fire="saveImg"></div>',
  16. '<div class="tc">亲爱的<span class="orange"> {username} </span>欢迎使用本程序</div>',
  17. '</div>',
  18. '<div class="bgdiv">',
  19. '<div class="x-button-normal x-button x-iconalign-center x-layout-box-item x-stretched" fire="loginOut" >退出登录</div>',
  20. '</div>'
  21. ),
  22. data: {pic:'',username:'test'}
  23. }
  24. });

data是指数据源,用于配置一些可变数据。

tpl是数据展示模版,具体用法可以参考Ext.Template, Ext.XTemplate这两个类

plugins是指扩展插件,在这里我自己写了一个按钮插件,按钮控件原理类似于这个插件的写法。

具体见:http://www.cnblogs.com/mlzs/p/3281084.html

cls只应用的css:

  1. /*#region 详细页 */
  2. .info .x-innerhtml {
  3. font-size:.9em;
  4. }
  5. .info img {
  6. width:100% !important;
  7. height:auto !important;
  8. }
  9. .info .bgdiv {
  10. padding:5px 10px;
  11. }
  12. .info .divline {
  13. border-bottom:1px solid #dedede;
  14. }
  15. .info .title {
  16. font-size:1.5em;
  17. }
  18. .info .label {
  19. font-size:0.8em;
  20. line-height:1.5em;
  21. display:inline-block;
  22. border-radius:0 40px 40px 0;
  23. background:#FFC0CB;
  24. padding:0 5px;
  25. margin-bottom:5px;
  26. border-left:2px solid orange;
  27. }
  28. /*#endregion*/

效果如下:

值得注意的属性还有:

activeItem:当前选中项,可以默认配置也可以通过setActiveItem方法来设置,我们做界面切换需要用到的。

autoDestroy:内部控件是否自动销毁,默认值是true。做界面切换的时候能够自动清理内存的。

baseCls:用于追加css,我们自行扩展一些控件时会用到,可以看看官方控件的源码来了解了解。

html:显示固定内容,例如:

  1. Ext.define('app.view.About', {
  2. alternateClassName: 'about',
  3. extend: 'Ext.Container',
  4. xtype: 'about',
  5. config: {
  6. title: '关于',
  7. cls: 'info',
  8. html: '这是一个开源示例,是我对sencha touch的深层应用.'
  9. }
  10. });

效果如下:

id:大家喜闻乐见的一个属性,不过在这里不推荐使用,推荐使用itemId这个属性替代他。

listeners:监听事件集合,一般在控制器中监听,不常用。

record:对应的数据模型,在panel中用来做校验等。

ui:其实作用和cls差不多,不过这里是指定一个皮肤的意思。

zIndex:一个喜闻乐见的css属性,具体作用请谷歌。

masked:遮罩效果,想知道有什么用?看这里:http://www.cnblogs.com/mlzs/p/3156845.html

值得注意的方法还有:

up/down:向上/向下查找元素

addCls/removeCls:添加/移除css,各种按下,选中效果就需要通过他们来实现了

addListener:添加事件监听,没啥可说的,很重要

animateActiveItem:带动画效果的activeItem方法

destroy:销毁控件本身

setData/getData:设置数据的方法能干啥不用我说罢

hide/show:隐藏/显示控件本身

on/un:绑定/移除事件,它是最常用的

removeAll:移除所有子项

removeAt:移除指定序号的子项

showBy:显示浮动层,用法仔细看api

值得主要的事件:

hide/show:视图被隐藏/显示,不推荐监听,资料:http://www.cnblogs.com/mlzs/archive/2013/06/13/3134162.html

activate/deactivate:视图被激活/取消激活,推荐监听,资料:http://www.cnblogs.com/mlzs/p/3382909.html

destroy:视图被销毁时

add:向视图同添加子项时

activeitemchange:调用setActiveItem方法会触发

move:视图被移除时,注意销毁和移除不一样,销毁连内存都清理了

sencha touch Container的更多相关文章

  1. sencha touch Container 监听超链接插件

    有时候内容直接从后台获取,有可能包含超链接,打包成应用之后,点击会造成不好的后果,这样做能够用外部浏览器打开.需要Cordova支持 监听插件代码: /* *监听a标签,用外部浏览器打开链接 */ E ...

  2. sencha touch Container tpl 监听组件插件(2013-9-14)

    将http://www.cnblogs.com/mlzs/p/3279162.html中的功能插件化 插件代码: /* *tpl模版加入按钮 *<div class="x-button ...

  3. 【转载】Sencha Touch 提高篇 组件选择器

    免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:威老     原文地址:http://www.cnblogs.com/weil ...

  4. Sencha Touch xtype对应的class

    Sencha Touch 2的有效xtype xtype Class ----------------- --------------------- actionsheet Ext.ActionShe ...

  5. 【翻译】探究Ext JS 5和Sencha Touch的布局系统

    原文:Exploring the Layout System in Ext JS 5 and Sencha Touch 布局系统是Sencha框架中最强大和最有特色的一个部分. 布局要处理应用程序中每 ...

  6. 【翻译】在Ext JS和Sencha Touch中创建自己定义布局

    原文:Creating Custom Layouts in Ext JS and Sencha Touch 布局系统是Sencha框架中最强大和最独特的一部分.布局会处理应用程序中每个组件的大小和位置 ...

  7. 【翻译】在Ext JS和Sencha Touch中创建自定义布局

    原文:Creating Custom Layouts in Ext JS and Sencha Touch 布局系统是Sencha框架中最强大和最独特的一部分.布局会处理应用程序中每个组件的大小和位置 ...

  8. Sencha Touch 实战开发培训 视频教程 第二期 第一节

    经过忙碌的准备,终于在2014.4.7晚上8:10分开课. 本来预定在8点开课的,不过电脑出了点问题,推迟了. 本期培训一共八节,前两节免费,后面的课程需要付费才可以观看. 本节内容: 了解Sench ...

  9. Sencha Touch 实战开发培训 视频教程 第二期 基础提高篇 预告

    “抛砖网”国内首家首创纯实战型培训机构,提供在线培训.技术指导及答疑! 团队通过360全方位技术培训+1度手把手技术指导,保证每一个学员能最快掌握实际工作技能: 让每一个学员都能站在我们的肩膀上,展翅 ...

随机推荐

  1. gradle 的安装

    前言: 我不是一个勤奋好学的人,奔着新技术就跑去尝试学习.但是在工作或者学习的过程中,遇到了的技术,还是得一个坎一个坎的迈过去.把今天遇到的坎变成明天的垫脚石. 想学习一下 spring 的源码,然后 ...

  2. mysql使用sql语句查询数据库所有表注释已经表字段注释

    场景: 1. 要查询数据库 "mammothcode" 下所有表名以及表注释 /* 查询数据库 ‘mammothcode’ 所有表注释 */ SELECT TABLE_NAME,T ...

  3. Android 下载zip压缩文件并解压

    网上有很多介绍下载文件或者解压zip文件的文章,但是两者结合的不多,在此记录一下下载zip文件并直接解压的方法. 其实也很简单,就是把下载文件和解压zip文件结合到一起.下面即代码: URLConne ...

  4. Masonry插件:内容始终水平居中

    跟随浏览器框架大小,主题内容居中 代码 <!DOCTYPE html> <html> <head> <title>masonry瀑布流插件</ti ...

  5. 【ML】数据集资源

    http://www.kdnuggets.com/datasets/index.html http://kdd.ics.uci.edu/

  6. 小程序实现textarea随输入的文字行数变化高度自动增加

    参考链接:https://blog.csdn.net/liuwengai/article/details/78987957 该实现方法是根据上面的链接改编为小程序的实现,代码如下: wxml: < ...

  7. chrome插件开发之调试

    https://blog.csdn.net/qustdong/article/details/46046553

  8. Strict Mode (JavaScript)

    摘要: ECMAScript5中引入的严格模式,通过让JavaScript运行环境对一些开发过程中最常见和不易发现的错误做出和当前不同的处理,来让开发者拥有一个”更好”的JavaScript语言.但目 ...

  9. [Module] 03 - Software Design and Architecture

    本篇涉及内容: ORM框架(无需再用contentprovider或者sqlitedatebasehelper之类的古董工具了) 规划各种业务Bean文件(配合ORM框架) 设计一个好的请求基类(Ba ...

  10. 爬虫 测试webmagic (一)

    目标:统计斗鱼(www.douyu.com)人数 思路: 1. 目录找到douyu播出的所有游戏 http://www.douyutv.com/directory 2. 借助 chrome 定位到每个 ...