原文: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应用程序中怎样使用路由的更多相关文章

  1. 【翻译】在Ext JS 5应用程序中如何使用路由

    原文:How to Use Routing in Your Ext JS 5 Apps 简介 Ext JS 5是一个重要的发布版本,它提供了许多新特性来创建丰富的.企业级的Web应用程序.MVVM和双 ...

  2. 在Ext JS 5应用程序中如何使用路由

    简介 Ext JS 5是一个重要的发布版本,它提供了许多新特性来创建丰富的.企业级的Web应用程序.MVVM和双向数据绑定为开发人员承担了大量的繁重工作.在Ext JS 5种,另一个新特性就是路由,它 ...

  3. 【翻译】Ext JS 5.0.1 中的新功能

    原文:What's New in Ext JS 5.0.1 今天,我们很高兴的宣布Ext JS 5.0.1发布了!此维护版本基于Sencha社区的反馈做了一些改进.下面让我们来了解一下这些改变. 可访 ...

  4. 【翻译】Ext JS最新技巧——2015-8-11

    原文:Top Support Tips Seth Lemmons:使用棒极了的Awesome Font Ext JS 6附带了一个新的海卫一主题,可以使用Font Awesome字体作为背景图像的图标 ...

  5. 【翻译】Ext JS 6有什么新东西?

    工具包ToolKits 发布 包的命名 Fashion 图表 ItemEdit插件 网格 电子表格 可操作模式Actionable Mode和可访问性 LazyItems插件 屏幕阅读器支持可访问性 ...

  6. 将Ext JS 5应用程序导入Web项目以及实现本地化

    在Ext JS 5,使用了新的脚本和样式加载方式,这对于将应用程序导入到Web项目中产生了点小麻烦.而对于本地化文件的导入,也采用了新的方式,本文将一一解答这些问题. 将Ext JS 5应用程序导入W ...

  7. 【翻译】Ext JS最新技巧——2014-8-13

    原文:Top Support Tips Greg Barry:新的框架. 新的文档类型(Doctype) 在Ext JS 5,只支持IE8+,因此不再古力用户使用严格的HTML文档类型.现在,推荐使用 ...

  8. 【翻译】Ext JS——高效的编码风格指南

    原文:ExtJS - Efficient coding style guide 作者:Raja 切勿使用"new"关键字:在Ext JS中,使用"new"关键字 ...

  9. 【翻译】Ext JS 5的委托事件和手势

    原文:Delegated Events and Gestures in Ext JS 5 简介 Ext JS在5之前的版本,被设计为专用于传统鼠标输入的桌面设备使用.而从5开始,添加了对触屏输入的支持 ...

随机推荐

  1. Windows Phone开发(17):URI映射

    原文:Windows Phone开发(17):URI映射 前面在讲述导航的知识,也讲了控件,也讲了资源,样式,模板,相信大家对UI部分的内容应该有了很直观的认识了.那么今天讲什么呢?不知道大家在练习导 ...

  2. [Windows Phone] 导览控制项(Navigation controls)

    原文:[Windows Phone] 导览控制项(Navigation controls) [前言] 如果应用程式只有单一页面,在画面呈现上可能会让使用者容易没有新鲜感,这个范例是使用导览控制项(Na ...

  3. 超人学院Hadoop大数据资源共享

    超人学院Hadoop大数据资源共享-----数据结构与算法(java解密版) http://yunpan.cn/cw5avckz8fByJ   訪问password b0f8 很多其它精彩内容请关注: ...

  4. jvisualvm远程监控Tomcat

    网上已经有很多这方面的资料,但有些很杂乱,这里做了整理总结. 一.Java VisualVM 概述 对于使用命令行远程监控jvm 太麻烦 . 在jdk1.6 中 Oracle 提供了一个新的可视化的. ...

  5. 使用 WPF 实现所见即所得HTML编辑器

    Introduction In this tip, you will learn the use of WPF webbrowser control and the use of the librar ...

  6. PHP情人:p十几天来学习hp第一天

    我这里是暂时的 Apache web server 和 MY SQL 如WEB,在php-4.3.3下的环境做的程序.当然要简单的构建和訪问查看数据库 PHPMYADMIN 不可少.  以下简介一下P ...

  7. client多线程

    1.多线程对象 对象可以是多线程访问,线程可以在这里分为两类: 为完成内部业务逻辑的创建Thread对象,线程需要访问对象. 使用对象的线程外部对象. 进一步假设更精细的划分.业主外螺纹成线等线,. ...

  8. 基于Spring + Spring MVC + Mybatis 高性能web构建

    基于Spring + Spring MVC + Mybatis 高性能web构建 一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.AngularJs,做了大量的研究,对前后端交互 ...

  9. Windows Phone 的控件倾斜效果

    原文:Windows Phone 的控件倾斜效果 Windows Phone 7的系统设置里,按钮都有一个点击倾斜的效果,但自己添加的控件就没有.但微软提供了这个效果的代码:TiltEffect MS ...

  10. 移动开发中Fiddler的那些事儿 (转)

    当我以前在调PC端网页的时候,Firefox有Firebug,Chrom也有自己的调试抓包工具,用起来很方便. 但是现在我要在手机上面调试页面,这个时候就没有这么方便的现成工具了. 后面发现了Fidd ...