4.7 Routing -- Redirecting

一、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)将会向往常一样执行。

时间: 2024-10-18 02:25:52

4.7 Routing -- Redirecting的相关文章

PatentTips - Transparent unification of virtual machines

BACKGROUND Virtualization technology enables a single host computer running a virtual machine monitor ("VMM") to present multiple abstractions and/or views of the host, such that the underlying hardware of the host appears as one or more indepen

解决vSphere 5.1上Linux VM提示:Unable to collect IPv4 routing table问题

错误信息:vmsvc[xxxx]:[warning][guestinfo]RecordRoutingInfo:Unable to collect IPv4 routing table 经检查确认,下列组件正确安装:LinuxVMOS正确安装:IP信息正确设定:VMwareTools正确安装:虚拟机硬件版本为9: 重启VM的时候,启动过程中提示libguestinfo.so模块故障会提示,不过VM依然正常启动,不过它会Hung住1.20分钟: 通过故障提示,经过系列排查之后,发现如果去掉libti

Flask error: werkzeug.routing.BuildError

@main.route('/sendfile', methods=['GET', 'POST']) def sendfile():     if request.method == 'POST':         f = request.files['file']         basepath = path.abspath(path.dirname(__file__))         upload_path = path.join(basepath, 'static/uploads')  

RabbitMQ 路由选择 (Routing)

让日志接收者能够订阅部分消息.例如,我们可以仅仅将致命的错误写入日志文件,然而仍然在控制面板上打印出所有的其他类型的日志消息. 1.绑定(Bindings) 在前面中我们已经使用过绑定.类似下面的代码: 1 channel.queueBind(queueName, EXCHANGE_NAME, ""); 绑定表示转发器与队列之间的关系.我们也可以简单的认为:队列对该转发器上的消息感兴趣. 绑定可以附带一个额外的参数routingKey.为了与避免basicPublish方法(发布消息的

ip routing&no ip routing

ip routing--------查路由表, 如果ping的目的在RT中没有,不发出任何包(arp也不会发出)?? 如果RT中存在,则arp??下一跳,相当于no ip routing+配置网关 no ip routing----不查路由表? ?? ?? ?? ?不配置网关---arp-catch中存在很多条目(相当于static指出接口)? ?? ?? ?? ?配置网关--则会arp网关一次,有一个条目 ip routing&no ip routing

How Flask Routing Works

@How Flask Routing Works The entire idea of Flask (and the underlying Werkzeug library) is to map URL paths to some logic that you will run (typically, the "view function"). Your basic view is defined like this: @app.route('/greeting/<name>

RabbitMQ(四) -- Routing

RabbitMQ(四) -- Routing `rabbitmq`可以通过路由选择订阅者来发布消息. Bindings 通过下面的函数绑定Exchange与消息队列: channel.queue_bind(exchange=exchange_name, queue=queue_name) 可以通过添加`routing_key`来做路由选择,如下: channel.queue_bind(exchange=exchange_name, queue=queue_name, routing_key='b

Asp.Net MVC 3【URLs, Routing,and Areas】续

http://www.cnblogs.com/HuiTai/archive/2012/07/24/2597875.html 接着前面继续学习分享我们的路由. 现在我们把Global.asax文件里的RegisterRoutes方法还原至原来的样式,具体代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Syste

Mule ESB-Content-Based Routing Tutorial(2)

承接 Mule ESB-Content-Based Routing Tutorial(1) 五.运行应用程序 完成创建,配置,并保存你的新的应用程序,您就可以在嵌入Mule的服务器上运行(包括在Mule Studio中,作为捆绑下载的一部分). 1.在Package Explorer窗格中,右键单击Basic Tutorial.mflow文件,然后选择Run As>Mule Application. (如果您还没有保存,Mule会提示您现在保存. 2.Mule会立即显示运行进度齿轮,开始您的应用