Lux*_*Lux 5 ember.js ember-old-router
当我使用Ember路由器时,如何在模板中定义连接到控制器的操作?
一个例子在这里:http: //jsfiddle.net/KvJ38/3/
Unter My Profile是两个动作:一个在State上定义,并且正在工作两个在Controller上定义.我怎样才能使这个工作或我应该使用另一种方法?
App.Router = Em.Router.extend({
enableLogging: true,
location: 'hash',
root: Em.State.extend({
// EVENTS
goHome: Ember.State.transitionTo('home'),
viewProfile: Ember.State.transitionTo('profile'),
// STATES
home: Em.State.extend({
route: '/',
connectOutlets: function(router, context) {
var appController = router.get('applicationController');
appController.connectOutlet(App.HomeView);
}
}),
// STATES
profile: Em.State.extend({
route: '/profile',
connectOutlets: function(router, context) {
var appController = router.get('applicationController');
appController.connectOutlet(App.ProfileView);
}
}),
one: function() {
alert("eins");
},
})
});
Run Code Online (Sandbox Code Playgroud)
Sté*_*ond 12
操作的默认目标是路由器,但您可以在模板中定义另一个:
{{action two target="controller"}}
Run Code Online (Sandbox Code Playgroud)
并在"App.ProfileController"中添加"两个"功能.
UPDATE
这个答案有望在2012年中期正确.现在(2014年9月),文件说:
默认情况下,{{action}}帮助程序会触发模板控制器上的方法.[...]如果控制器没有实现与其操作对象中的操作同名的方法,则该操作将被发送到路由器,其中当前活动的叶子路由将有机会处理该操作.[...]如果模板的控制器和当前活动的路由都没有实现处理程序,则操作将继续冒泡到任何父路由.最终,如果ApplicationRoute定义了一个,它将有机会处理该行动.触发操作但在控制器,当前路由或任何当前路由的祖先上未实现匹配的操作处理程序时,将引发错误.