Router默认开启,会自动拦截所有链接的Touch行为,如果希望一个链接走浏览器原生跳转而不使用router,可以在链接上增加 class="external" 或者自定义属性,如 <a href="xxx" external>xxx</a>.
如果需要禁用路由功能,那么可以在 zepto 之后, msui 之前使用 script $.config = {router: false} 来禁用.
如只需禁用部分链接,除了使用external外,还可用自定义动态过滤器 $.config.routerFilter = function($link) {},实参 $link 是当前点击的链接,返回 false 表示不使用路由功能,返回 true 表示进入路由处理,参考初始化,示例如下:
如果需要使用路由功能,那么页面代码结构上需要满足下面两个条件:
div.page-group 里。 形式可以参考router Demopage 的 classbody 等):
{% highlight html %}
...
你可以在同一个HTML文件中内联编写多个页面。每一个页面都是一个 .page 容器,如果有多个页面,则需要用 .page-current 标记出第一次进入的时候应该显示的页面。
每一个 .page 容器都应该有一个全局唯一的id,路由器会使用这个id作为唯一标示,如果没有设置id,可能会导致路由出错。你只需要这样写一个链接就可以跳转到id对应的内联页面 <a href='#{page-id}'>跳转</a>.
注意: ajax 和 pushState 限制了 ajax 加载的页面只能是同域.
除了内联编写多个页面以外,你还可以通过ajax来加载新页面。通过ajax加载新页面和普通的链接写法没有区别,路由器会自动拦截链接的点击事件,并通过ajax请求加载新的页面。
{% highlight html %}我们对后退操作进行了封装,你只需要在任意链接上增加一个 .back 类,点击就会自动返回到上一页(调用 history.back)。
或者你可以通过调用 $.router.back() 来执行返回上一页操作。
data-no-cache="true" 属性来标明点击该链接时不使用缓存,如:<a href="/detail" data-no-cache="true">no cache</a>load 来加载时,把可选的参数 ignoreCache 设为 true,如:$.router.load('/detail', true)你可以通过调用 $.router.load(url, ignoreCache) 来加载一个页面,参数url既可以是一个ajax页面的地址,也可以是一个内联页面的id.
从一个页面准备开始加载,到执行完加载动画,会按顺序触发以下事件:
| 事件 | 说明 |
|---|---|
| pageLoadStart | 发送Ajax之前触发 |
| pageLoadCancel | 取消了正在发送的ajax请求 |
| pageLoadError | Ajax 请求失败 |
| pageLoadComplete | Ajax 请求结束,无论是成功还是失败 |
| pageAnimationStart | 新页面的DOM插入当前页面之后,动画执行之前 |
| pageAnimationEnd | 新页面动画执行完毕 |
| beforePageRemove | 加载新的页面,动画切换完成后,移除旧的 document 前发送,事件回调函数参数是event, $pageContainer,其中$pageContainer 是 .page-group(注:在 window 上触发,且内联 page 的切换不会触发此事件) |
| pageRemoved | 加载新的页面,动画切换完成后,移除旧的 document 后发送(注:在 window 上触发,且内联 page 的切换不会触发此事件) |
| beforePageSwitch | page 切换前触发,该事件在 pageAnimationStart 前,beforePageSwitch 之后会做一些额外的处理才触发 pageAnimationStart |
| pageInit | 新页面中的组件初始化完毕 |
其中 pageLoad* 事件是在 window 上触发,其他都是在 .page 元素上触发。为了性能考虑,最好通过 document 代理监听。如果是内联页面,则没有前面的四个 pageLoad* 事件。
你可以这样监听事件:
{% highlight js %} $(document).on("pageInit", "#page-index", function(e, pageId, $page) {}); $(document).on("pageInit", function(e, pageId, $page) { if(pageId == "pageIndex") {} }); {% endhighlight %}