2012-08-13 175 views
1

我有一个基于ember.js路由器的应用程序,需要在转换到不同的应用程序状态之前对某个操作执行一些基本逻辑。我的按钮的动作看起来像Ember.js路由器,从视图中获取路由器

<button {{action doSomethingThenNavigate target="view"}}>Compute the Change</button> 

,我会在我的Ember.View子类doSomethingThenNavigate方法。

我的问题是我不知道怎么去触发从视图中的更改路由器,我已经试过

doSomethingThenNavigate: -> 
    console.log "computing something..." 
    App.router.showCat() 

其中showCat()是我的路由器的方法。这不起作用。

我有例证的jsfiddle问题HERE

回答

2

这里是工作fiddle

你应该使用:

App.router.send('showCat') 

代替:

App.router.showCat() 
+0

这是票,谢谢! – wmarbut 2012-08-13 17:41:10

+3

虽然这是工作,它是一个非常紧密的耦合和视图的事件句柄不容易测试。你不应该直接使用'App.router'。我建议使用'this.get('controller.target')。send('showCat',event);'而不是视图的事件。在使用路由器时,'controller.target'默认设置为路由器。 – pangratz 2012-08-14 05:26:43

+0

@pangratz使用this.get('controller.target')而不是App.router的任何理由?为什么Ember在应用程序初始化期间在所有控制器中设置目标属性? – Manoharan 2012-08-14 06:19:31