一、Transitioning and Redirection

从一个route调用transitionTo或者从一个controller调用transitionToRoute将会停止任何进程中的任何跳转并且开启一个新的,作为重定向功能。

transitionTo携带的参数和行为和link-to辅助器完全一样:

  • 如果你跳转进一个没有动态字段的路由,该路由的model hook任然会运行。
  • 如果新的路由有动态字段,你需要为每一个字段传递一个model或者一个identifier (标识符)。传递一个model将会跳过字段的model hook。传递一个identifier将会运行model hook,并且你可以在参数中获取这个identifier (标识符)。

二、Before the model is known

如果你想要从一个路由重定向到另一个,你可以在路由的处理器的beforeModel hook做转换。

app/router.js

Router.map(function() {
this.route('posts');
});

app/routes/index.js

export default Ember.Route.extend({
beforeModel() {
this.transitionTo('posts');
}
});

三、After the model is known

如果你需要关于当前model的信息用来决定重定向,你应该使用afterModel或者redirect hook。它们接收解析过的model作为第一个参数并且transiton作为第二参数,因此function作为别名。(实际上,afterModel默认的实现就是调用redirect

app/router.js

Router.map(function() {
this.route('posts');
this.route('post', { path: '/post/:post_id' });
});

app/routes/post.js

export default Ember.Route.extend({
afterModel(posts, transition) {
if (posts.get('length') === 1) {
this.transitionTo('post', posts.get('firstObject'));
}
}
});

当过跳转posts路由时如果它只有一条post数据,当前的跳转将终止,为了支持重定向到PostRoute,用一个单一的post object作为它的model

四、Based on other application state(基于其他应用程序的状态)

1. 你可以基于一些其他应用程序的状态有条件的跳转:

app/router.js

Router.map(function() {
this.route('topCharts', function() {
this.route('choose', { path: '/' });
this.route('albums');
this.route('songs');
this.route('artists');
this.route('playlists');
});
});

app/routes/top-charts/choose.js

export default Ember.Route.extend({
beforeModel() {
var lastFilter = this.controllerFor('application').get('lastFilter');
this.transitionTo('topCharts.' + (lastFilter || 'songs'));
}
});

app/routes/filter.js

// Superclass to be used by all of the filter routes: albums, songs, artists, playlists
export default Ember.Route.extend({
activate() {
var controller = this.controllerFor('application');
controller.set('lastFilter', this.templateName);
}
});
  • 在例子中,导航到/,URL立即跳转到用户所在的最后一个过滤URL。第一次,它跳转到/songs URL。

2. 你的路由也可以选择只在某些情况下跳转。如果beforeModel hook不终止或者跳转到一个新的路由,剩下的hooks(model, afterModel, setupController,renderTemplate)将会向往常一样执行。

4.7 Routing -- Redirecting的更多相关文章

  1. PatentTips - Transparent unification of virtual machines

    BACKGROUND Virtualization technology enables a single host computer running a virtual machine monito ...

  2. ASP.NET路由[ASP.NET Routing]

    ASP.NET路由[ASP.NET Routing] ASP.NET路由允许你在使用URL时不必匹配到网站中具体的文件,因为这个URL不必匹配到一个文件,你使用了描述用户行为且更容易被用户理解的URL ...

  3. 解读ASP.NET 5 & MVC6系列(12):基于Lamda表达式的强类型Routing实现

    前面的深入理解Routing章节,我们讲到了在MVC中,除了使用默认的ASP.NET 5的路由注册方式,还可以使用基于Attribute的特性(Route和HttpXXX系列方法)来定义.本章,我们将 ...

  4. 解读ASP.NET 5 & MVC6系列(11):Routing路由

    新版Routing功能介绍 在ASP.NET 5和MVC6中,Routing功能被全部重写了,虽然用法有些类似,但和之前的Routing原理完全不太一样了,该Routing框架不仅可以支持MVC和We ...

  5. [ASP.NET MVC 小牛之路]07 - URL Routing

    我们知道在ASP.NET Web Forms中,一个URL请求往往对应一个aspx页面,一个aspx页面就是一个物理文件,它包含对请求的处理. 而在ASP.NET MVC中,一个URL请求是由对应的一 ...

  6. ASP.NET MVC Routing学习笔记(一)

    Routing在ASP.NET MVC中是非常核心的技术,属于ASP.NET MVC几大核心技术之一,在使用Routing之前,得先引入System.Web.Routing,但其实不用这么麻烦,因为在 ...

  7. Routing 功能概述 - 每天5分钟玩转 OpenStack(98)

    路由服务(Routing)提供跨 subnet 互联互通功能. 例如前面我们搭建了实验环境: cirros-vm1      172.16.100.3        vlan100 cirros-vm ...

  8. .NET/ASP.NET Routing路由(深入解析路由系统架构原理)

    阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模型的入口 4.ASP.NET Routing 路由对象模型的内部结构 4 ...

  9. 理解 OpenStack 高可用(HA)(3):Neutron 分布式虚拟路由(Neutron Distributed Virtual Routing)

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

随机推荐

  1. java socket通信-传输文件图片--传输图片

    ClientTcpSend.java   client发送类 package com.yjf.test; import java.io.DataOutputStream; import java.io ...

  2. Java精选笔记_JSP开发模型

    JSP开发模型 JSP Model JSP Model1简单轻便,适合小型Web项目的快速开发. JSP Model2模型是在JSP Model1的基础上提出的,它提供了更清晰的代码分层,更适用于多人 ...

  3. SSHLibrary库关键字汇总

    红色框的部分是设置系统用户标识符(不可缺少):$表示非超级用户  #表示超级用户

  4. PyQt4消息窗口

    默认情况下,如果我们单击了窗口标题栏上的X标记,窗口就会被关闭.但是有些时候我们想要改变这一默认行为.比如,我们正在编辑的文件内容发生了变化,这时若单击X标记关闭窗口,编辑器就应当但出确认窗口. #! ...

  5. hive 客户端执行select count(1) from t_sz01

    yarn-site.xml配置错误 yarn.nodemanager.aux-services 中的-原先配置为_ 导致错误......

  6. K-mean和k-mean++

    (1)k-mean聚类 k-mean聚类比较容易理解就是一个计算距离,找中心点,计算距离,找中心点反复迭代的过程, 给定样本集D={x1,x2,...,xm},k均值算法针对聚类所得簇划分C={C1, ...

  7. [Web Chart系列之六] canvas Chart 导出图文件

    前言 博主正在参加CSDN2013年度博客之星评选,如果这篇文章对您有用,请投他一票: 投票地址:http://vote.blog.csdn.net/blogstaritem/blogstar2013 ...

  8. Deploying Cloud Foundry on OpenStack Juno and XenServer (Part I)

    link http://rabbitstack.github.io/deploying-cloud-foundry-on-openstack-juno-and-xenserver-part-i/ Cl ...

  9. 使用synchronized(非this对象)同步代码块解决脏读问题

    首先通过示例来学习验证多个线程调用同一个方法时随机的. package syn_out_asyn; import java.util.ArrayList; import java.util.List; ...

  10. MyBatis——日志

    Logging Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具: SLF4J Apache Commons Logging Log4j 2 Log4j JDK logging ...