如何以编程方式在路由之间使用Ember.js的新路由器进行转换

题:

如何使用新的Ember.js路由器以编程方式转换到新路由?

背景/背景

使用旧的Ember.js路由器,您可以使用路由器的发送方式以编程方式在路由/状态之间切换:

//OLD Router Syntax
App = Ember.Application.create({
  Router: Ember.Router.extend({
    root: Ember.Route.extend({
      aRoute: Ember.Route.extend({
        route: '/',
        moveElsewhere: Ember.Route.transitionTo('bRoute')
      }),
      bRoute: Ember.Route.extend({
        route: '/someOtherLocation'
      })
    })
  })
});
App.initialize();

程序转型:

App.get('router').send('moveElsewhere');

给出新的Ember.js路由器(下面)我们如何完成同样的事情?

//NEW Router Syntax
App.Router.map(function(match) {
  match('/').to('aRoute');
  match('/someOtherLocation').to('bRoute');
});

工作(坏的解决方案?)

这不对,对吗?

window.location = window.location.href + "#/someOtherLocation";

新路由器似乎无法使用的解决方案:

1)在App.router实例上调用send方法

> App.router.send("moveElseWhere")
TypeError: Cannot call method 'send' of undefined

2)明确声明路由并设置事件

App.ARoute = Ember.Route.extend({
  events: {
    moveElseWhere: function(context){
       this.transitionTo('bRoute');
    }
  }
);

App.UploadRoute.moveElseWhere()
TypeError: Object (subclass of Ember.Route) has no method 'moveElseWhere'

注意:在写入时,Ember.js Router documentation仍然是指旧路由器,其中Ember.js Router guide是指新的路由器

最佳答案
假设这个路由器定义:

App.Router.map ->
  this.resource('old_route', {path : ""})
  this.resource('new_route', {path : ":model_id"})

当您以控制器为上下文时,可以使用old_route.transitionToRoute()函数移动到new_route.

从控制器

this.get('target').transitionToRoute('new_route', model_instance)

this.get(‘target’) – 从控制器返回当前路由

从一个角度来看

this.get('controller').get('target').transitionToRoute('activity_detail', activity)

注意

函数* transitionTo()在1.0.0.RC3中已经为deprecated

转载注明原文:如何以编程方式在路由之间使用Ember.js的新路由器进行转换 - 代码日志