Sencha Modern
Sencha Modern
前言
经过一个月捣鼓,基于sencha公司最新框架版本 ExtJS7.0 modern 的示例代码可以和大家见面了。示例中对系统主题、公共(组件,方法)封装、模块示例,开发规范,做了大量的编写,期间借鉴了一些其它UI框架的风格,也吸取了一些其它框架中对日常开发业务代码的封装,经过不断的融合,完善,踩坑,改进,现推出已经做好的示例,希望借此拉近开发人员与原生框架的距离,避免一些弯路,浪费不必要的宝贵时间。
- 演示地址 https://jpengsong.github.io/modern-pc/
- 源码地址 https://github.com/jpengsong/sencha-modern-pc.git
- 官网示例 http://49.232.143.24:8000/kitchensink
系统主题
支持主题配色和导航菜单切换
公共(组件,方法)封装
1:app/ux/comboxTree
/**
* 下拉树 使用例子如下(支持模糊搜索)
* {
* xtype: "comboxtree",
* label: 'fieldText',
* name: "name",
* displayField: "text",
* valueField: "value",
* width: "100%",
* height: 200,
* rootVisible: false,
* bind: {
* value: "{value}",
* store: "{store}"
* }
* }
*/
2:app/ux/chart/EChart.js
/**
* 百度图表Echart使用例子如下
* @param {Object} echart.setOption(option)
* {
* xtype: "echart",
* title: "访问量",
* reference: "echart",
* height: 400
* }
*/
3:app/ux/page/Dialog.js
/**
* 视图 弹窗基础类 使用例子适用于
* 登录页,锁定页面,空白页,404页面,500页面 ...
*/
4:app/ux/page/Page.js
/**
* 视图 页面基础类 使用例子范围适用于
* 条件查询和Grid列表展示
*/
5:app/ux/page/TreePage.js
/**
* 视图 页面基础类 使用例子范围适用于
* 左侧树和右侧Grid列表展示
*/
6:app/ux/plugin/Pagination.js
/**
* 分页插件 使用例子如下
* plugins: {
* pagination:{
* displayInfo:false
* }
* }
*/
7:app/ux/plugin/RequestData.js
/**
*
* 绑定组件数据存在延迟,而不能立即调用,此插件用来初始化组件请求参数
* 分页请求参数 采用统一格式如下
* var RequestData = {
* TokenGuid:用户身份票据,
* Data:{
* QueryItem:Object或者Array,
* PagingSetting:{
* PageCount:10,
* PageIndex:0,
* SortBy:"ASC"
* SortOrder:"field"
* }
* }
* }
* OR
* var RequestData = {
* TokenGuid:用户身份票据,
* Data:{Object或者Array}
* }
* 使用例子如下:
* plugins: {
* requestdata: {
* autoLoad: true
* }
* }
*/
8:app/ux/proxy/API.js
/**
*
* Store通过Proxy请求本地模拟数据 使用例子如下:
* proxy: {
* type: 'api',
* reader: {
* type:"jsonreader",
* datatype:config.DataType.GridStore
* },
* url: '/api/SystemManage/SysUser/GetSysUserPage',
* }
*
*/
9:app/ux/proxy/Server.js
/**
*
* Store通过Proxy请求远程数据 使用例子如下:
* proxy: {
* type: 'server',
* reader: {
* type:"jsonreader",
* datatype:config.DataType.GridStore
* },
* url: '/api/SystemManage/SysUser/GetSysUserPage',
* }
*
*/
10:app/ux/reader/JsonReader.js
/**
* proxy请求(本地/远程)json数据,返回来做统一处理:
* 默认和(本地/远程)所有请求交互,按照统一往返标准格式交互,返回数据格式如下
* ResponseData:{
* Data: {}, 返回数据
* Success: true,是否正确返回
* Message: "",系统消息
* Code: "",系统格式编码 例:Public.I_0001(执行成功),Public.E_0001(公共错误),Public.E_0002(用户缺少某个权限)...
* }
*
*/
11:app/ux/tree/Ztree.js
/**
* Ztree 使用例子如下:
* {
* xtype:"ztree",
* valueField:"id",
* displayField:"name",
* parentField:"parebtId"
* }
*/
12:app/ux/upload/FileUploader.js
/**
* 百度WebUploader上传文件, 批量文件上传使用例子如下:
* {
* xtype: "fileuploader",
* inline :true,
* title:"批量上传",
* reference: "fileUploader",
* cls: 'col-sm-10 col-xs-20',
* height: 500,
* listeners:{
* painted:function () {
* var me = this;
* me.setOption({
* server: "/api/File/Upload"
* });
* }
* }
* }
*/
13:app/ux/utilty/Ajax.js
/**
* 发起Ajax.request请求
* @param {Object} option 包含下列属性的对象
* @param {Object} option.data 传给后台的参数
* @param {Object} option.baseUrl 提交至后台的url地址,缺省为``
* @param {String} option.url 提交至后台的url接口
* @param {String} option.method 提交方法,缺省为`POST`
* @param {String} option.type 返回类型,缺省为`JSON`
* @param {String} option.params 提交的其他参数
* @param {Function} option.success 提交成功后执行的函数
* @param {Function} option.error 提交失败后执行的函数
* @param {Boolean} option.async 是否异步提交数据,缺省为`true`
* @param {Number} option.timeout 请求延时,毫秒,缺省为`30000`
* @param {Object} option.scope 作用域,缺省为`this`
* @param {Boolean} option.nosim 参数设置 false 请求本地接口,true 请求远程接口 缺省为true
* @param {Boolean} option.showmask 参数设置true显示遮罩
* @param {String} option.maskmsg 遮罩显示消息 缺省为 '正在请求数据...'
* 前后端交互采用统一格式处理,使用例子如下:
* App.Ajax.request({
* url: "/api/SystemManage/SysUser/AddSysUser""),
* method: "POST"),
* nosim: false,
* type: "JSON",
* showmask: true,
* maskmsg: "正在保存...",
* params: user.getData(),
* success: function (response) {
*
* },
* error: function (msg) {
*
* }
* })
*/
14:app/ux/utilty/Config.js
/**
*
* 全局配置类
*
*/
15:app/ux/utilty/Cookie.js
/**
* 操作Cookie的工具类。需要处理cookie时,使用此类的SetCookie和GetCookie方法来设置和获取cookie值。
* 例子如下:
* @example
* App.Cookie.SetCookie('username', 'abc');//设置cookie
* var name = App.Cookie.GetCookie('username');//获取cookie值
*/
16:app/ux/utilty/Privilege.js
/**
* 控制组件是否具有权限
*
* {
* text: ResManager.getControlString("Public.Add"),
* hidden: App.Privilege.isHide("CodeTable_New"),
* scope: this
* }
*
* 例子中是一个按钮控件,对应一个操作权限`CodeTable_New`,在hidden配置里调用本函数。
* 如果当前用户不具有此权限,按钮会隐藏。
* @param {String} bizCode 控件对应的业务代码
* @return {Boolean} 当不具有该业务代码的权限时,返回`false`
* @static
*/
17:app/ux/utilty/ResponseCode.js
/**
* 操作ResponseCode的工具类
* 本地/远程 返回ResponseData的Code枚举
* ResponseData = {
* Data:object,
* Success:true,
* Message:null,
* Code:枚举
* }
*/
18:app/ux/utilty/SimulateDB.js
/**
* 本地模拟数据数据库,用于多个本地数据源联合查询
*/
19:app/ux/utilty/TreeNode.js
/**
* 格式化树节点数据 用于第三方树插件和TreeSotre
*/
20:app/ux/utilty/UserInfo.js
/**
* 处理用户信息的工具类
*/
21:app/data/Simulated.js
/**
* 请求模拟数据的基础操作类
*
* 功能包括 (获取请求数据源,分页查询,操作树节点数据)
*
*/
22:overrides/field/PasswordField.js
/**
* 重写密码框组件,支持密码显隐
*/
23:overrides/loadmask/LoadMask.js
/**
* @overrides 遮罩层组件,需要样式配合
*/
24:overrides/selection/Row.js
/**
* @overrides 列表在有分页情况下,修复在全选后不能取消全选
*/
25:overrides/simlet/JsonSimlet.js
/**
* @overrides 返回前台模拟数据
* var responseData = {
* Data: {},
* Success: true,
* Message: "",
* Code: "Public.I_0001"
* }
*/
模块示例
1:用户管理
Ext.define("App.view.systemmanage.sysuser.SysUser", {
extend: "App.ux.page.Page",
xtype: "sysuser",
viewModel: "sysuser",
controller: "sysuser",
initialize: function () {...
},
initQueryPanel: function () {...
},
initGridPanel: function () {...
},
})
2:组织机构
Ext.define("App.view.systemmanage.sysorg.SysOrg", {
extend: "App.ux.page.TreePage",
xtype: "sysorg",
viewModel: "sysorg",
controller: "sysorg",
initialize: function () {...
},
initTreePanel:function(){...
},
initQueryPanel:function(){...
},
initGridPanel:function(){...
}
})
3:菜单管理
Ext.define("App.view.systemmanage.sysmenu.SysMenu", {
xtype: "sysmenu",
viewModel: "sysmenu",
controller: "sysmenu",
extend: "App.ux.page.TreePage",
initialize:function(){...
},
initTreeGridPanel:function(){...
}
})
开发规范
1:类命名规范
2:代码规范
3:查找组件
4:业务目录层级
6:css命名规范
Sencha Modern的更多相关文章
- Sencha, the nightmare!
基础 创建一个应用程序 sencha -sdk /path/to/sdk generate app %name% /path/to/app 跑起来 cd /path/to/app sencha app ...
- 01.Sencha ExtJS 6 - Generate Workspace and Application
生成workspace 下载gpl版本的ExtJs6 在https://www.sencha.com/legal/GPL/页面的右侧申请链接来下载,或者使用链接http ...
- 初探 Ext JS 6 (sencha touch/ext升级版)
Sencha Touch 现在已全面升级至Ext Js 6,那么我们如何使用他们呢? 首先去官网下载最新的sdk和帮助文档 sdk下载地址:https://www.sencha.com/product ...
- 【翻译】Sencha Touch2.4 The Layout System 布局
[翻译]The Layout System 布局 In Sencha Touch there are two basic building blocks: componentsand containe ...
- Extjs6(一)——用sencha cmd建立一个ExtJs小项目
本文基于ext-6.0.0 一.用sencha cmd建立一个ExtJs小项目 首先,需要一个命令行工具.进入extjs所在目录. 然后,输入:sencha -sdk [ExtJs6.0文件夹地址] ...
- Sencha EXTJS6的 Eclipse 插件安装指南
Sencha EXTJS的 Eclipse 插件安装指南 (翻译:苏生米沿) 本文地址:http://blog.csdn.net/sushengmiyan/article/details/52566 ...
- Ext Js v6.2.0.103 Sencha Cmd 命令
Sencha Cmd v6.2.0.103 Sencha Cmd 提供几种全局开关命令. 在大多数案例中, 第一步是在Sencha SDK基础上创建应用 例如 Ext JS 或 Sencha Touc ...
- Sencha Cmd创建Ext JS示例项目
Sencha提供了免费的Cmd工具,可以用来创建Ext JS项目并提供了一些便利的功能. Sencha也在官方文档中提供了一个示例来演示如何创建一个Sample Login App. 本文就介绍一下这 ...
- Ext JS 6和Sencha CMD 6 快速入门
Ext JS 6和Sencha CMD 6的入门很简单.一个命令,即可生成一个功能完整的“通用”应用程序,可以运行在本地服务器上. 这个“通用”的应用程序包含一组核心的stores,模型(models ...
随机推荐
- 当接口请求体里的日期格式跟web页面日期格式不一致时,该如何处理呢?
首先引入Unix纪元时间戳的概念:即格林威治时间(GMT,Greenwich Mean Time)1970年1月1日00:00:00,到当前时间的秒数.单位为秒(s). 那么当前时间的Unix纪元时间 ...
- PHP fastcgi_finish_request 方法
本文介绍,PHP运行在FastCGI模式时,FPM提供的方法:fastcgi_finish_request. 在说这个方法之前,我们先了解PHP有哪些常用的运行模式? PHP运行模式 CGI 通用网关 ...
- 简单node服务器demo,麻雀虽小,五脏俱全
//本服务器要实现的功能如下: //1.静态资源服务器(能读取静态资源) //2.能接收get请求,并能处理参数 //3.能接收post请求,并能处理参数 const http = require(' ...
- Java开发桌面程序学习(11)——javafx 鼠标点击,右击,双击
javafx 鼠标事件 给某个控件设置鼠标点击监听器,三个条件分别判断为单击,右击还是双击 单击判断 event.getButton()==MouseButton.PRIMARY 右击判断 event ...
- Hystrix失败处理逻辑解析
在上篇文章Hystrix工作流程解析中,我们整体介绍了Hystrix的工作流程,知道了Hystrix会在下面四种情况下发生降级: 熔断器打开 线程池/信号量跑满 调用超时 调用失败 本篇文章则介绍一下 ...
- tornado中传递参数的几种方式
方法一 :tornado路由可以使用正则表达式中的子表达式传递url参数.比如:(r"/member//(\w*)/([01]*)", MemberHandler)匹配以后,tor ...
- SAP系统玩阴的?
SAP系统玩阴的? 近日和项目上的ABAP开发顾问一起弄一个自开发的报表.其中某个栏位的取值需要从批次主数据里抓取到供应商代码,然后根据供应商代码取到供应商名称等.为此笔者需要备功能说明书.在说明书里 ...
- gzip格式分析与识别
" 介绍gzip格式,识别gzip压缩的数据流量." 在协议分析过程中,经常会发现gzip压缩的数据,例如在HTTP协议中,在HTTP头中会标示,内容编码为gzip.DEFLATE ...
- 个人博客如何开启 https
以前写过利用 wordpress 搭建的一个博客『个人博客搭建( wordpress )』,绑定了域名,但是没开启 https,在浏览博客的时候浏览器会提示不安全.下面来谈下个人博客如何免费申请证书, ...
- INSTALL_FAILED_TEST_ONLY
查看博客:http://www.enjoytoday.cn/posts/159 Android studio安装apk无法安装,报错误,网上搜索可以看到都说是:* 调用者不被允许测试的测试程序*,但具 ...