登录
注册
关于我们
简体中文
ENGLISH
搜索
购物车
0 ITEMS ON YOUR CART
首页
动态
方案
案例
专栏
期刊
联系我们
首页
期刊
[Ext JS6]路由(Routing)及使用
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]路由(Routing)及使用
## [Ext JS6]路由(Routing)及使用 ## 在应用中使用路由(Routing) 在一般的网友中, 点击一个link转到一个新的页面。 但是在单页面的应用中,不会载入新页面,只是和当前页面的组件交互。如何使用浏览器的前进/后退功能,就是 Ext Js5开始的路由功能了。 路由可以追踪应用的浏览器历史记录,可以可以直接链接到应用中的某个部分。这对于将app加到书签和发送连接的场景非常有用。 但是路由不能保存数据和 Session,数据需要存储在类似cookie或是本地存储中。路由仅用来追踪应用的状态。 哈希 https://www.example.com/apps/users#user=1234 user=1234称作哈希。 哈希变化的时候, 浏览器会添加到历史记录。可以使用前进\后退按钮。 ### 应用路由的实现方式 Router类是在Ext JS 5中新增的, 用它来处理应用中的哈希变化。Ext.util.History用来配合哈希的变化。路由是与哈希匹配的字符串,允许在Ext应用程序中进行深层链接。看一个实例: ```javascript Ext.define('MyApp.view.main.MainController', { extend : 'Ext.app.ViewController', routes : { 'users' : 'onUsers' }, onUsers : function () { //... }}); ``` 这个路由会响应#users哈希, 并且执行onUsers方法。 ### 更新哈希 控制器有提供redirectTo方法来更新哈希。 this.redirectTo(‘user/1234’); redirectTo还可以设置选项: force -如果为true,即使地址栏中的哈希值与传递给redirectTo的哈希值相同,这也会强制路由器做出反应。 replace -默认情况下,将更改散列并创建浏览器历史记录中的新条目。 这意味着浏览器的后退按钮可以返回到前一个哈希。 如果为true,则浏览器历史记录中的当前条目将替换为传递给redirectTo的哈希。 默认令牌-Token 在/app/view/Application.js添加defaultToken配置 ```javascript Ext.define('MyApp.Application', { extend : 'Ext.app.Application', //... defaultToken : 'home' }); ``` 这里会使用#home 启动应用程序时,它将检查URI的当前哈希值。 如果定义了哈希,它将执行路由处理程序。 如果没有找到散列,它将添加#home散列,并且将执行任何路由处理程序以适当地处理它。 ### 带参数的哈希 ```javascript Ext.define('Extjs6App.view.main.MainController', { extend: 'Ext.app.ViewController', alias: 'controller.main', routes : { 'user/:id' : 'onUser' }, onItemSelected: function (sender, record) { Ext.Msg.confirm('Confirm', 'Are you sure?', 'onConfirm', this); }, onConfirm: function (choice) { if (choice === 'yes') { // } }, onUser: function(id){ Ext.Msg.alert('Route', 'routes is user/'+id); }}); ``` 在控制器中加入routes, 在浏览器输入 http://localhost:1841/#user/1234, 效果就是会弹出对话框。 最重要的效果是如果输入http://localhost:1841/#user/12345 之后, 可以使用浏览器的后退按钮回到之前的页面了。 ### 哈希参数的格式 使用conditions设置参数的格式: ```javascript Ext.define('MyApp.view.main.MainController', { extend : 'Ext.app.ViewController', routes : { 'user/:id' : { action : 'onUser', conditions : { ':id' : '([0-9]+)' } } }, onUser : function (id) { //... }}); ``` ### 路由的处理 有时候需要阻止路由的处理。比如当前用户是否有权限查看应用程序的某些部分。可以配置before 用来停止当前或所有路由, 或者继续执行。 ```javascript Ext.define('MyApp.view.main.MainController', { extend : 'Ext.app.ViewController', routes : { 'user/:id' : { before : 'onBeforeUser', action : 'onUser' } }, onBeforeUser : function (id, action) { Ext.Ajax.request({ url : '/security/user/' + id, success : function() { action.resume(); } }); }, onUser : function (id) { //... }}); ``` onBeforeUser的一个参数是id , 第二个参数是 action, 执行 action的 resume方法继续执行。停止路由, ```javascript onBeforeUser : function (id, action) { Ext.Ajax.request({ url : '/security/user/' + id, success : function () { action.resume(); }, failure : function () { action.stop(); } }); }, ``` ### 处理没有匹配的路由 如果修改哈希没有找到对应的路由, 就会触发unmatchedroute?事件 ```javascript Ext.application({ name : 'MyApp', listen : { controller : { '#' : { unmatchedroute : 'onUnmatchedRoute' } } }, onUnmatchedRoute : function (hash) { //... }}); ``` 也可以触发一个全局的事件: ```javascript Ext.application({ name : 'MyApp', listen : { global : { unmatchedroute : 'onUnmatchedRoute' } }, onUnmatchedRoute : function (hash) { //... }}); ``` 还可以直接使用 Ext的事件 ```javascript Ext.on('unmatchedroute', function (hash) { //...}); ``` ### 在单个哈希使用多个路由 使用管道分割符: | user/1234|messages 就会同时执行两个路由了。 这个默认分割符也可以通过Ext.route.Router.multipleToken修改。 路由的名字也可以修改 ```javascript routes: { 'bar' : 'onBar', 'baz' : { action : 'onBaz', name : 'bazRoute' }, 'foo' : 'onFoo' } ``` 初始哈希可以通过首先传递一个字符串来设置 ```javascript this.redirectTo(‘foo’); ``` 如果再加一个的话 ```javascript this.redirectTo({ bar : 'bar'}); ``` 就是叠加了, 哈希是#foo|bar. 如果已存在的就是替换 ```javascript this.redirectTo({ foo : 'foober'}); ``` 变成: ?#foober|bar Hashbang?的支持 Hashbang?会在#之后多一个 ! 设置方式 Ext.util.History.hashbang = true; 在 Ext.application({ name : 'MyApp', router : { hashbang : true }}); 也可以这样设置: Ext.route.Router.setHashbang(true); 暂停和恢复路由 一个常见的用例是在应用程序启动时延迟执行路由,直到用户检验完成。 ```javascript Ext.application({ name : 'MyApp', defaultToken : 'home', launch : function () { var me = this; Ext.route.Router.suspend(); me.checkUserSession().then(me.onUser.bind(me), me.onUserError.bind(me)); }, onUser : function (user) { MyApp.$user = user; Ext.route.Router.resume(); }, onUserError : function (error) { // handle error // do not execute queued hash changes Ext.route.Router.resume(true); this.redirectTo('login'); }}); ```
网站导航
首页
动态
方案
案例
专栏
期刊
联系我们