You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
var before = function (id) {
alert("direct to : /Home/About/" + id);
},
on = function (id) {
window.location = "/Home/About/" + id;
};
var routes = {
"/about/:id": {
before: before,
on: on
}
}
director.js:客户端的路由
1.简单的开始
上文简单提到:
director.js
是通过“#”符号进行路径组织的,例如:路由注册在URL里的体现是用“#”符号来标识路由的开始,再利用"/"分隔符(分隔符可自定义,后面会讲到)来定义路由片段。客户端路由其实就是通过URL来区分应用程序的不同状态,并且定义在不同的状态下应该做什么事情。当用户访问不同的URL时,
director.js
会解析路由信息并告知应用程序需要做什么事情。下面是一个简单的例子:
2.初始化及路由注册
director.js
的主要对象是Router
对象,构造方法如下:构造方法传入的
routes
参数是一个路由表对象,它是一个具有键值对结构的对象,路由允许多层的嵌套定义。键值对的键对应URL中传入的路径,一般一个键对应按分隔符切割后的某一部分;而键值对的值则对应该路径需要触发的回调函数名,可以传入一个或多个函数名,传入多个函数名时请使用数组对象。一般来说,回调函数要在路由表对象使用前先声明,否则js会报错。另外,回调函数除非特殊情况,一般不推荐使用匿名函数,请尽量先声明后使用。
上面例子中,对应的URL分别为:
#/dog
和#/cat
声明
Router
对象后,需要调用init()
方法进行初始化,如下:3.路由的即时注册
当我们在开发一些规模比较大的应用的时候,一般做不到一开始就将需要的路径和它对应的回调函数都预先准备好。很多时候,我们都是在做到某一功能时,或者是开发一些独立性比较强耦合度比较低的模块时,才知道我们需要什么样的路径和回调函数。这个时候我们就需要实时注册路由的功能了。
director.js
通过“on
”方法,提供对即时注册功能的支持,示例如下:4.路由事件
路由事件是路由注册表中一个有固定命名的属性,是指当路由方法
router.dispatch()
被调用时,路由匹配成功的时定义的需要触发的回调方法(允许定义多个回调方法)。上文即时注册功能里的"on"方法就是一个事件。具体信息如下:on
:当路由匹配成功后,需要执行的方法before
:在触发“on”方法之前执行的方法仅在客户端有效的方法:
after
:当离开当前注册路径时,需要执行的方法once
: 当前注册路径仅执行一次的方法5.配置参数
director.js
通过配置一些可选项的参数从而提升Router对象的灵活性。而这些参数的设置需要通过router.configure()
方法实现。具体的配置参数有:
仅在客户端有效的参数:
5.URL匹配
在路由事件那一节的示例里,有这么一个路由表达式
"/about/:id"
,其中":"后面定义的部分表示实际路径对应的这部分是传入回调函数的参数,例如"#/about/5
"中,5就是id参数的值。参数的匹配还可以用嵌套的方式来定义:在实际应用的过程中,我们的路由可能会变得非常复杂,像"
/about/:id
"这样简单的表达式并不能满足我们的需求。而director.js
支持利用正则表达式来匹配复杂的路由名称,匹配到的值会作为参数传给回调函数,例如:当URL传入'
#/hello/world
',则回调函数的who=world
支持更为复杂的多参数的传递:
当URL传入'
#/hello/world/johny/appleseed
',则回调函数的a=johny,b=applesee
The text was updated successfully, but these errors were encountered: