【翻译】在Ext JS 5应用程序中怎样使用路由
原文:How to Use Routing in Your Ext JS 5 Apps
简单介绍
Ext JS 5是一个重要的公布版本号,它提供了很多新特性来创建丰富的、企业级的Web应用程序。MVVM和双向数据绑定为开发者承担了大量的繁重工作。在Ext JS 5种,还有一个新特性就是路由,它能够在控制器内轻松的管理历史记录。前进和后退button是每个浏览器都会拥有的公共用户接口,如今,使用Ext JS 5在单页面应用程序中处理导航变得相当简单了。
Ext JS 5路由
在Ext JS,已经能够使用Ext.util.Histroy类来处理历史记录的变化,但在Ext JS 5,这个处理变得更easy和灵活。路由提供了一种更易于配置的方式来将散列值映射到控制器的方法,这包括使用參数和之前的行为来控制路由运行的流程,而在后端则使用Ext.util.History来处理。下面来看一个简单的样例:
Ext.define('MyApp.controller.Main', {
extend : 'Ext.app.Controller',
routes : {
'home' : 'onHome'
},
onHome : function() {}
});
在路由对象中,keyword“home”就是要匹配的散列值,而值“onHome”就是控制器中的方法,当散列仅仅匹配的时候,就会运行该方法(比如:http://localhost#home)。要在控制器内改变散列值,能够使用redirectTo方法:
this.redirectTo(‘home’); //redirects to http://localhost#home
这将会将URL的散列值改动为“#home”,然后会运行MyApp.controller.Main控制器实例中路由所定义的的onHome方法。假设有多个控制器都匹配同样的散列值,运行的顺序将会依据应用程序实例的控制器数组中所定义的顺序运行。
散列值和參数
散列值还能够包括參数,路由可轻易的将他们作为參数传递给控制器的方法。带參数的散列值看起来像“#user/1234”,当中,1234是用户的ID,会被作为一个參数。能够通过下面方法来为控制器定义散列值:
Ext.define(‘MyApp.controller.Main', {
extend : 'Ext.app.Controller',
routes : {
'user/:id' : 'onUser'
},
onUser : function(id) {}
});
在为路由配置一个预期的參数的时候,须要在參数名称前加入一个冒号,在以上样例中的參数就是“:id”,路由将会把匹配的不论什么值作为传递參数并传递给onUser方法。传递给控制器方法的參数的顺序与路由定义时的顺序同样。
还能够使用正則表達式来控制要匹配的散列值。在用户ID的演示样例中,ID仅仅能是数字值,而不同意是其它值,为了控制匹配,在路由中能够使用conditions配置项:
Ext.define('Fiddle.controller.Main', {
extend : 'Ext.app.Controller',
routes : {
'user/:id' : {
action : 'onUser',
conditions : {
':id' : '([0-9]+)'
}
}
},
onUser : function(id) {}
});
演示样例中演示了两样东西:路由的定义能够是一个对象,action属性相应的是控制器的方法,以及使用conditions配置项。配置项conditions是一个包括參数和正則表達式字符串的对象。採用正則表達式字符串,而不是正則表達式的原因是,路由会依据路由内的參数创建一个默认的正則表達式,而conditions配置项的作用就是重写默认的正則表達式字符串。默认的正則表達式字符串是“([%a-zA-Z0-9\\-\\_\\s,]+)”。
假设没有匹配路由的散列值,就会在应用程序中触发unmatchedroute事件,该事件可在应用程序中或控制器中进行监听,不管在哪里,监听方式都是一样的。下面是在控制器中监听的演示样例:
Ext.define('Fiddle.controller.Main', {
extend : 'Ext.app.Controller',
listen : {
controller : {
'*' : {
unmatchedroute : 'onUnmatchedRoute'
}
}
},
onUnmatchedRoute : function(hash) {}
});
有时候,为了避免路由继续运行或等待ajax请求这种异步操作而延迟运行,须要将路由的处理过程挂起。为了实现这个,能够在路由中定义before操作,且可将路由中定义的不论什么參数传递给它。下面是一个使用ajax请求的演示样例,且在请求完毕后继续运行路由:
Ext.define('Fiddle.controller.Main', {
extend : 'Ext.app.Controller',
routes : {
'user/:id' : {
action : 'onUser',
before : 'beforeUser',
conditions : {
':id' : '([0-9]+)'
}
}
},
beforeUser : function(id, action) {
Ext.Ajax.request({
url : '/user/confirm',
params : {
userid : id
},
success : function() {
action.resume();
},
failure : function() {
action.stop();
}
});
},
onUser : function(id) {}
});
方法beforeUser会象onUser方法一样接收id參数,只是,它还可获取到一个action參数。參数action包括有resume和stop方法用来控制路由的运行。运行action的resume方法,如Ext.Ajax.request的success处理中的那样,将会恢复路由的运行,这样就可实现路由的异步行为。运行action的stop方法,正如在failure回调函数中卡你打那样,会停止当前路由的运行。假设将true传递给stop方法,队列中的全部路由都会停止运行,这样就能够对路由实现完整的控制。
Ext JS应用程序可能会变得非常大非常复杂,并且有时候可能会希望在同一时间激活多个散列值。Ext JS 5有能力去处理多个散列值并分别去运行他们。单独的散列值会被沙盒化,这意味着假设须要取消一个路由,能够将true传递给action.resume方法,这就能够阻止该散列值的其它路由,而其它的散列值会继续运行。每个散列值都须要进行分隔,例如以下面演示样例的散列值:
#user/1234|message/5ga
路由会将散列值拆分为“user/1234”和“message/5ga”。路由会依据user的值去找到全部匹配的路由并运行不论什么匹配的路由。假设没有匹配散列值的路由,就会触发unmatchedroute事件。接下来,路由将会依据message的值来寻找不论什么匹配的路由并运行他们。假设没有匹配值的路由,将会触发unmatchedroute事件。
小结
Ext JS 5中的新的路由特性是处理浏览器历史堆栈的一直简单配置方式,它不单灵活,并且功能强大,足以满足复制的应用程序的须要。与MVC+VM、双向数据绑定和其它新特性在一起,使Ext JS 5成为了一个打造企业级应用程序的完美框架。
作者:Mitchell Simoens
Mitchell is a Senior Support Engineer providing support on the forums and the portal. Mitchell also is the maintainer of Sencha Fiddle and other web properties. Mitchell is also the co-author of "Sencha Touch in Action", and is a regular contributor of Ext JS and Sencha Touch frameworks, as well as extensions and plugins on GitHub.
【翻译】在Ext JS 5应用程序中怎样使用路由的更多相关文章
- 【翻译】在Ext JS 5应用程序中如何使用路由
原文:How to Use Routing in Your Ext JS 5 Apps 简介 Ext JS 5是一个重要的发布版本,它提供了许多新特性来创建丰富的.企业级的Web应用程序.MVVM和双 ...
- 在Ext JS 5应用程序中如何使用路由
简介 Ext JS 5是一个重要的发布版本,它提供了许多新特性来创建丰富的.企业级的Web应用程序.MVVM和双向数据绑定为开发人员承担了大量的繁重工作.在Ext JS 5种,另一个新特性就是路由,它 ...
- 【翻译】Ext JS 5.0.1 中的新功能
原文:What's New in Ext JS 5.0.1 今天,我们很高兴的宣布Ext JS 5.0.1发布了!此维护版本基于Sencha社区的反馈做了一些改进.下面让我们来了解一下这些改变. 可访 ...
- 【翻译】Ext JS最新技巧——2015-8-11
原文:Top Support Tips Seth Lemmons:使用棒极了的Awesome Font Ext JS 6附带了一个新的海卫一主题,可以使用Font Awesome字体作为背景图像的图标 ...
- 【翻译】Ext JS 6有什么新东西?
工具包ToolKits 发布 包的命名 Fashion 图表 ItemEdit插件 网格 电子表格 可操作模式Actionable Mode和可访问性 LazyItems插件 屏幕阅读器支持可访问性 ...
- 将Ext JS 5应用程序导入Web项目以及实现本地化
在Ext JS 5,使用了新的脚本和样式加载方式,这对于将应用程序导入到Web项目中产生了点小麻烦.而对于本地化文件的导入,也采用了新的方式,本文将一一解答这些问题. 将Ext JS 5应用程序导入W ...
- 【翻译】Ext JS最新技巧——2014-8-13
原文:Top Support Tips Greg Barry:新的框架. 新的文档类型(Doctype) 在Ext JS 5,只支持IE8+,因此不再古力用户使用严格的HTML文档类型.现在,推荐使用 ...
- 【翻译】Ext JS——高效的编码风格指南
原文:ExtJS - Efficient coding style guide 作者:Raja 切勿使用"new"关键字:在Ext JS中,使用"new"关键字 ...
- 【翻译】Ext JS 5的委托事件和手势
原文:Delegated Events and Gestures in Ext JS 5 简介 Ext JS在5之前的版本,被设计为专用于传统鼠标输入的桌面设备使用.而从5开始,添加了对触屏输入的支持 ...
随机推荐
- hadoop调度程序时出现“Error opening job jar”错误
提示出现的问题: Exception in thread "main" java.io.IOException: Error opening job jar: /home/depl ...
- ACE 主动对象模式的按部就班的实现方法
ACE的主动对象模式的实现 对分布式系统设计来说,ACE提供的主动对象模式是让我们在系统框架构建的时候,回归到传统的单线程编程思维.你可能要问,既然有主动对象,那必然有被动对象,没有错,确实有被动对象 ...
- Net 高效开发
Net 高效开发之不可错过的实用工具 工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件,内存 ...
- Java / Android 基于Http的多线程下载的实现
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/26994463 有个朋友需要个多线程现在的例子,就帮忙实现了,在此分享下~ 先说下 ...
- Python re正则表达式
参考: 博客园<Python正則表達式指南> 博客园<Python之re模块> 在此感谢博主的无私奉献,本文主要介绍python中re模块的几个简单使用方法.具体的使用方法请參 ...
- 让你的字ScrollView、ListView充分伸展
android默认ScrollView.ListView在最顶部的下拉上拉时或底部,未与反弹效应,很僵,让你无法继续拖累,不比iOS至于能否反弹.个人觉得,iOS互动还是略胜一筹.因此,我们已经走在A ...
- jquery处理页面元素
处理父级页面中的元素 $(parent.document).find('#hidSendPerson').val(val);$(parent.document).find('#btnGo').clic ...
- 使用WPF创建无边框窗体
一.无边框窗口添加窗口阴影 实际上在WPF中添加无边框窗口的窗口阴影十分简单. 首先,设置WindowStyle="None"以及AllowsTransparency=" ...
- hdu 2899 hdu 3400 三分/几何
hdu2899 : 水提,直接三分,事实上求导后二分也能够. #include<iostream> #include<cstdio> using namespace std; ...
- HDU 1885 Key Task 国家压缩+搜索
点击打开链接 Key Task Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...