如何在我当前的控制器中获取以前的路由器。
App.MyController = Em.ObjectController.extend({
next:function() { // This is my action helper in HBS
this.transitionTo('nextPage');
},
back:function() { // This is my action helper in HBS
// Here I need to dynamically identify my previous route.
// How can I get my previous route.
}
});
答案 0 :(得分:21)
再次检查路由器对象后,我没有看到任何属性允许你抓住最后一条路线。在前4路中,有一个属性用于最后一条路线,但这是一个很难处理的属性。
因此我的解决方案与之前的解决方案相同:我创建自己的mixin来处理您导航的路线,并从该路线列表中,您可以获得您想要的任何路线:当前的,最后一个,等等......
jsFiddle这里:http://jsfiddle.net/sMtNG/
<强>密新强>
首先要做的是创建一个mixin,它允许我们将路由推送到HistoryController
。我们可以通过创建setupController
方法来实现这一点,当然每次进入路径时都会调用该方法。
App.HistoryMixin = Ember.Mixin.create({
setupController: function() {
this.controllerFor('history').pushObject(this.get('routeName'));
}
});
我们正在将路线推进HistoryController
。
历史记录控制器
由于我们目前正在将routeName
推送到不存在的HistoryController
,我们需要继续创建它,这绝对没什么特别的。
App.HistoryController = Ember.ArrayController.extend();
索引控制器
由于HistoryController
存储了我们导航到的路由列表,因此我们需要在其他控制器上访问它,例如IndexController
,因此我们会使用needs
指定应该在哪个控制器中访问它。
App.ApplicationController = Ember.Controller.extend({
needs: ['history']
});
实施Mixin
我们现在拥有了跟踪路线所需的一切,因此我们将指定我们的路线需要实施此路线。
App.CatRoute = Ember.Route.extend(App.HistoryMixin);
<强>模板强>
最后但并非最不重要的是,现在我们HistoryController
可以访问IndexController
,并且mixin将每个访问的路由推送到HistoryController
,我们可以使用我们的应用程序视图输出路由列表,并指定最后一条路由。当然,在你的情况下,你需要最后一条减去一条路线,但在我做任何事情都没有意义!
<h1>Routes History ({{controllers.history.length}})</h1>
<ul>
<li>Last Route: {{controllers.history.lastObject}}</li>
{{#each controllers.history}}
<li>{{this}}</li>
{{/each}}
</ul>
我希望这会让你直截了当。
答案 1 :(得分:0)
目前的解决方案感觉就像尾巴摇着狗一样。
简单的解决方案是keyboard :: IORef GLfloat -> IORef GLfloat -> IORef GLfloat -- rotations
-> IORef Double -> IORef Double -- parameters a and b
-> IORef Double -- isolevel
-> IORef Double -- zoom
-> KeyboardCallback
keyboard rot1 rot2 rot3 a b l zoom c _ = do
case c of
'e' -> rot1 $~! subtract 2
'r' -> rot1 $~! (+ 2)
.......
'q' -> leaveMainLoop
_ -> return ()
postRedisplay Nothing
Ember没有跟踪路由器的历史记录,因为它会是多余的。默认情况下,所有浏览器都已处理