nogen: true
翻译完成度: 100%
====
Riot 路由器是你能够找到的最小化的路由器实现,在包括IE8在内的众多浏览器上都能工作。它只监视URL hash的变化 (#
之后的那一部分). 大多数单页应用都只处理hash,如果你真的需要关心整个URL的变化你最好使用其它的路由器实现。
Riot 路由器在 "#" 之后的部分由 "/" 字符分隔时工作得最好. 这种情况下Riot直接把各个部分取出来供你使用。
当URL hash变化时执行 callback
例如
riot.route(function(collection, id, action) {
})
举个例子,如果 hash 变成 #customers/987987/edit
则上例中的参数是:
collection = 'customers'
id = '987987'
action = 'edit'
hash 发生变化可能是以下几种情况:
- 地址栏中输入的新的 hash 值
- 当浏览器的 后退/前进按钮被点击
- 当代码中调用了
riot.route(to)
开始监听window hash. 这个方法在riot加载时会自动调用. 如果你要调用它,通常是与 route.stop 一起使用. 例如:
riot.route.stop() // 清除所有旧的 riot.route 回调
riot.route.start() // 重新启动
清除所有 hashchange 监听器以及 route.route 回调.
riot.route.stop()
停止默认路由器后可以在应用中使用其它的路由器。
修改浏览器URL并通知所有通过 riot.route(callback)
指定的监听器,例如:
riot.route('customers/267393/edit')
对当前的 hash 值调用 callback
而不等待其发生变化。例如
riot.route.exec(function(collection, id, action) {
})
将默认解析器改成自定义解析器. 下面是自定义路径解析的例子:
!/user/activation?token=xyz
riot.route.parser(function(path) {
var raw = path.slice(2).split('?'),
uri = raw[0].split('/'),
qs = raw[1],
params = {}
if (qs) {
qs.split('&').forEach(function(v) {
var c = v.split('=')
params[c[0]] = c[1]
})
}
uri.push(params)
return uri
})
当URL变化时,你可以得到这些参数:
riot.route(function(target, action, params) {
/*
target = 'user'
action = 'activation'
params = { token: 'xyz' }
*/
})