登录
注册
关于我们
简体中文
ENGLISH
搜索
购物车
0 ITEMS ON YOUR CART
首页
动态
方案
案例
专栏
期刊
联系我们
首页
期刊
[Ext JS6]多类型设备开发
Ext JS开发大全
第1章 Ext JS快速入门示例[4/4]
第12章[12.10]富文本编辑器 CKEditor与Ext JS的整合
第12章[12.10.1] Ext JS + CKEditor+Spring Boot 实现编辑器图片上传
第11章[11.6] Ext JS 自行搭建远端库的包升级版本后找不到的问题解决
[Ext JS 4] 实战之Grid, Tree Gird编辑
ext命令集
第12章[12.3] Ext JSGrid中的超链接列及其功能实现
[Ext JS]textfield添加compositionstart、compositionupdate 和compositionend _os
[Ext JS ] 动添切换字段的必填与非必填
3.1 Ext JS 组件总览
[Ext JS] Grid表格批量编辑的实现
Ext JS 快速开发工具
带触发器按钮的输入框
Ext JS的布尔对象类型处理及便捷方法
Ext JS的Object类型处理及便捷方法
ExtJS RadioGroup(单选按钮组) 使用及注意事项
Ext JS 模拟后端数据实现
ToolTip 实现全介绍
Ext JS下拉单选框(Combobox,TagFied)使用及疑难问题解决
Ext JS应用测试概览
Sencha Studio 监视工具( Inspect Tool)
Ext JS 4 升级指南
Ext JS 如何定义公用方法(单例类 or 静态方法)
Ext JS的模块化开发(Package)
Ext3 -- Form 实例。 用来migrate file 数据到DB用的
ExtJS 3 在Tab下加入Form 实例
Extjs Grid 中给已经添加过Filter的列增加标识
Extjs 实战之 Ext.tree.TreePanel Tree无法显示
Extjs弹出框的异步执行
Grid 动态该表列( reconfigure)的性能改善
Spring Boot Ext JS准前后端框架应用的会话(Session)处理
[Ext JS 4] Extjs 图表 Legend(图例)的分行与分列显示
[Ext JS 4] Extjs 之 initComponent 和 constructor的区别
[Ext JS 4] Grid 中的单元格添加Tooltip 的效果
[Ext JS 4] Grid 实战之分页功能
[Ext JS 4] Grid 组件
[Ext JS 4] MVC 应用程序框架
[Ext JS 4] MVC 应用程序框架
发布 [Ext JS 4] contentEL,renderTo, applyTo 释义与区别
[Ext JS 4] 动态加载
[Ext JS 4] 实战之 ComboBox 和 DateField (消失之解决办法)
[Ext JS 4] 实战之 Picker 和 Picker Field
[Ext JS 4] 实战之 带week(星期)的日期选择控件(二)
[Ext JS 4] 实战之 ComboBox 和 DateField 的点击事件在IE下失效
## [Ext JS 4] 实战之 带week(星期)的日期选择控件(三)
[Ext JS 4] 实战之 带week(星期)的日期选择控件
[Ext JS 4] 实战之Chart 坐标控制(单坐标,双坐标)
[Ext JS 4] 实战之Chart, Column Chart 定制颜色
[Ext JS 4] 实战之Grid, Tree Gird 动态添加列
[Ext JS 4] 实战之Grid, Tree Gird 动态添加列续(性能考虑)
[Ext JS 4] 实战之Grid, Tree Gird 动态添加行
[Ext JS 4] 实战之Grid, Tree Gird 添加按钮列
[Ext JS 4] 实战之Grid, Tree Gird编辑Cell
[Ext JS 4] 实战之Load Mask - 在Grid Reconfigure的使用状况
[Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
[Ext JS 4] 实战之多选下拉单 (带checkbox) 续 - 带ALL 选项
[Ext JS 4] 实战之多选下拉单 (带checkbox)
[Ext JS 4] 实战之升级系列一[Ext jS 3-->Ext JS 4]
[Ext JS 4] 实战之将chart导出为png, jpg 格式的文件
[Ext JS 4] 实战之浏览器兼容
[Ext JS 4] 布局之实战二 - 中间区块不会自动伸展 (tab)续
[Ext JS 4] 组件之图表
[Ext JS 4]后台自动产生图档
[Ext JS 4]性能优化
[Ext JS 7 ]7.5 自适应配置 - Responsive Configs
[Ext JS 7] 关联(Association)
[Ext JS 7]事件(Event)
[Ext JS 7]ClassRequire错误解决
[Ext JS 7]的开发模式
[Ext JS 7]基于NPM的开发
[Ext JS ] 动添切换字段的必填与非必填
[Ext JS4] 数据包
[Ext JS4系列]Ext JS4 入门
[Ext JS6] Grid不同列的关联编辑
[Ext JS6] ViewControllers-视图控制器
[Ext JS6]Ext.Template
[Ext JS6]Sencha Cmd
[Ext JS6]编码规范
[Ext JS6]多类型设备开发
[Ext JS6]工作区-Workspace
[Ext JS6]路由(Routing)及使用
[Ext JS6]视图模型和数据绑定
[Ext JS6实战] Ajax获取Tree Store
[Ext JS6实战] Ext.XTemplate
[Ext JS6实战]动态数据绑定
[Ext JS] Sencha Cmd命令参考之二
[Ext JS] Sencha Cmd命令参考之一
[Ext JS] Group Grid-分组网格
[Ext JS] Group Grid-分组网格
[Ext JS]嵌套Grid的实现及注意事项
[Ext JS]SimXhr.js__dc=1659315492151_65 Uncaught TypeError问题分析与解决
[Ext JS]Sencha Studio安装与快速介绍之一
[Ext JS]textfield 添加 compositionstart、compositionupdate 和 compositionend
[Ext JS]图片显示方式
[ExtJS 6]Grid分页工具栏无效问题解决
[ExtJS6]ResponsiveColumn-自适应列布局
[Extjs 4] 类系统
基于Ext JS的模块化应用框架搭建及开发
[Ext JS] 自行搭建远端库的包升级版本后找不到的问题解决-The following versions are available
[Ext JS]鼠标移入移除时弹出和关闭窗口
[Ext JS]富文本编辑器 CKEditor与Ext JS的整合
[Ext JS]可编辑列Grid的全场景开发
['Ext JS]Grid中的超链接列及其功能实现
[Ext JS]Ext JS + CKEditor+Spring Boot 实现编辑器图片上传
[Ext JS]介绍与快速入门1
[Ext JS]实现带动态数字的图标
Spring Boot+Ext JS 实现图形验证码
Ext JS介绍与快速入门2
Ext JS开发基本环境准备与项目创建
[Ext JS]开发模式及快速测试方式
[Ext JS]多类型终端-电脑、移动端(手机、平板)
[Ext JS]基于Ext JS的MVC/MVVM架构的应用开发模式
[Ext JS]Ext JS的类与类体系
[Ext JS]Ext JS组件、容器与布局
[Ext JS]组件与容器的选择与开发
[Ext JS]Ext JS数据模型与数据封装
[Ext JS]Ext JS的控制器类型及使用
[Ext JS]说透Ext JS的窗口及对话框用法
[Ext JS]说透Ext JS的窗口及对话框用法
[Ext js]Grid行选择的多种场景和实现方式
[Ext JS]Ext JS类的继承与混合
CmsWing
[Ext JS6]多类型设备开发
## [Ext JS6]多类型设备开发 ExtJS 6可以很容易做到在多种设备运行的前端应用。 ### 通用的应用程序和工具包 Ext JS6将 Ext JS 和 Touch合并到包含不同工具包的同一个框架中。 classic 和 modern 。这些工具包包含 ExtJS 和 Touch 的视图层。共享核心资源和逻辑功能的应用就成为通用的应用程序。 选择应用程序的工具包, 只需要修改由 Cmd 产生的应用程序的 app.json 文件的如下内容: “toolkit”: “classic”, 两个框架的核心部分, 像data、controllers、models等被调整到一个共同的平台,这样就可以共享数据和逻辑。 app.json是由cmd产生的,包含了一些可以调整的属性。 如果是就项目的升级, 旧的app.json可能有点属性没有, 升级之后,在.sencha/app/app.defaults.json文件就可以看到默认值的配置了, 复制到对对应的app.json。 Classic - 经典 Classic工具 包支持传统的 Ext JS 5 的应用程序, 包括桌面浏览器、平板和触摸屏的笔记本电脑。 Modern - 现代 Modern工具包支持 HTML5应用程序, 包括桌面和手机的所有现代浏览器 (IE11及以上)都支持。 ### 构建配置 对app.json文件的builds属性的不同配置可以创建不同类型的应用程序。习惯上,构建不同主题和本地化的应用。 通过设置classic?或者modern?(也可以是同时设置), Cmd 会找到每一个配置来进行构建。 在每个工具包中, 业务逻辑是共用的。 看一个实例: ```javascript "builds": { "mymodern": { "toolkit" : "modern", "theme" : "theme-cupertino", "requires": [ "charts", "ux" ] }, "myclassic": { "toolkit" : "classic", "theme" : "theme-neptune", "slicer" : null, "requires": [ "charts" ] }} ``` ### Cmd 构建 以上面为例, 构建现代的应用程序 ``` sencha app build mymodern ``` 构建经典的应用程序 ``` sencha app build myclassic ``` 构建所有的 ``` sencha app build ``` 注意:构建的名字是可以随便给的, 文件和命令对应上就可以了。 以上mymodern 的构建使用 modern 工具包,使用ux和 chart 的包,主题是:cupertino 。 可以创建任意的构建, 默认,输出的目录在根目录的构建目录。 ### 通用应用程序 通用应用程序使用 Cmd 产生跨两个工具包的多个应用程序。 应用程序的构建结果可以运行在桌面端或是移动设备。需要注意的是同一个个应用程序不能在同一个类路径包含 modern和 classic两个框架。一般状况, 应用程序会在一个传统的应用程目录包含全局逻辑, 也就是目录:app。理想状况下, 应用程序的通用部分包括数据、模型、视图模型等, 共享控制器。逻辑部分跨工具包需要好好考虑一下。 举例来说, 一个经典的应用程序有一个grid, 一个现代的应用程序有一个list, 两个组件共享store和model。如果需要这两个组件针对用户的操作做出反应, 就需要在这个grid和list找到相同的事件。因为两个组件都可以触发select事件,理想的方案可能是利用它。但是,如果逻辑有包含itemtap, 而这个在经典模式是不认识的, 这样在Cmd构建经典的时候就可能会有问题。 考虑共用逻辑和资源之后, 在不同的工具包的 src目录下创建不同工具包特定的代码。 注意: 如果是构建单个工具包的应用,则目录结构看起来和之前的很类似。 Ext JS6目录结构,包括三个部分: 全局应用代码 经典特定代码 现代特定代码 类似: // app // app // model // store // view // classic // src // sass // resources // modern // src // sass // resources // resources // sass ### 创建通用的应用 使用 cmd 命令: ``` sencha -sdk /path/to/ExtSDK generate app MyApp ./MyAppLocation ``` 这个命令会创建一个功能齐全的通用应用, 会产生classic?和modern?的应用, 共用的部分在 app目录下。工具包特定的定义在各自的目录中(modern 、classic) 。 在开发的时候, 可以针对不同的工具包进行启动: 现代: ``` sencha app watch modern ``` 经典: ``` sencha app watch classic ``` 如果不输入查看的目标的话, 默认使用builds?配置里的第一个。 对应用构建之后, 就可以在各自的浏览器进行查看。在手机查看modern?风格的, 在桌面查看classic版本的。 ### 运行时配置 除此,还可以通过运行是配置, 包括应用配置、响应配置和平台配置 来使用户对于不同的媒介有着相同的无缝的体验。 #### App Profiles - 应用配置 Ext.app.Profile可以基于mainView(或者 Viewport)切换应用的视图。也就是说, 可以通过在某些条件下激活一个profile?创建一整套不同的视图。举例来说, 根据应用在不同的设备上(移动或者桌面浏览器)指定特定的视图。 创建两个应用配置的例子: ```javascript Ext.define('App.Application', { extend: 'Ext.app.Application', profiles: [ 'Desktop', 'Mobile' ]}); ``` 通过Profile的isActive方法返回生效的配置, 以侦测到的操作系统为例: ```javascript Ext.define('App.profile.Desktop', { extend: 'Ext.app.Profile', mainView: 'App.view.desktop.Main', isActive: function () { return Ext.os.is.Desktop; }, launch: function () { console.log('Launch Desktop'); }}); ``` 配置不会使用到mainView配置,可以使用配置的launch方法进一步客制, 仅生效的配置的launch会被执行。 #### Platform Configs - 平台配置 platformConfig?属性使用在类的定义中, 用于基于平台或设备的类型的配置, 类似: ```javascript Ext.define('App.view.summary.Manufacturing', { extend: 'Ext.panel.Panel', title: 'Mfg Summary', platformConfig: { desktop: { title: 'Manufacturing Summary' } }}); ``` 等效于: ```javascript Ext.define('App.view.summary.Manufacturing', { extend: 'Ext.panel.Panel', title: testForDesktop ? 'Manufacturing Summary': 'Mfg Summary'} ); ``` 第一种方式将platformConfig看成是类定义的一部分, 如果将视图看成数据的话, 第二种方式是标准的 JSON格式。 也可以如下方式使用: ```javascript Ext.define('App.view.summary.Manufacturing', { extend: 'Ext.panel.Panel', items: [{ xtype: 'panel', platformConfig: { desktop: { title: 'Manufacturing Summary' }, '!desktop': { title: 'Mfg Summary' } } }]}); ``` platformConfig的配置由initConfig?方法进行合并处理,也就是说, 只有在构造函数调用initConfig方法的类platformConfig才能生效。这些类包括:Ext.Widget,?Ext.Component, 大部分的数据类AbstractStore, 和使用Observable的类。 #### 响应配置 - Responsive Configs Ext JS 5开始引入responsiveConfig?,Responsive Mixin?和插件启用它。responsiveConfig配置的规则和属性不仅仅是在创建实例的时候, 而且会根据设备的方向和大小的变化来适应。相比platformConfig, responsiveConfig?的花销会大一些。 以下,根据设备的宽来显示标题: ```javascript Ext.define('App.view.summary.Manufacturing', { extend: 'Ext.panel.Panel', mixins: ['Ext.mixin.Responsive'], responsiveConfig: { 'width >= 600': { title: 'Manufacturing Summary' }, 'width < 600': { title: 'Mfg Summary' } }}); ``` 以上是应用在类上面, 如果是应用在实例上,就需要使用插件plugins了, 类似: ```javascript Ext.define('App.view.summary.Manufacturing', { extend: 'Ext.panel.Panel', items: [{ xtype: 'panel', plugins: 'responsive', responsiveConfig: { 'width >= 600': { title: 'Manufacturing Summary' }, 'width < 600': { title: 'Mfg Summary' } } }]}); ``` 需要注意的是上面的是 viewport?的宽度,不是组件的宽度。 ### 结论 不同的工具应用在不同的场景, 在加载时使用platformConfig,动态条件, 用responsiveConfig, 在更大的范围修改, 用Ext.app.Profile。 如果需要应用在平板和在桌面和手机看上去完全不一样, 可以考虑使用 cmd 的构建配置(profiles)。
网站导航
首页
动态
方案
案例
专栏
期刊
联系我们