对于我的登录/注销情况我烬实施的条件路由:Ember:如何让路由器和控制器一起工作?
App.Router = Ember.Router.extend({
//needs controller handling
//goLoggedIn: Ember.Route.transitionTo('loggedIn'),
goLoggedOut: Ember.Route.transitionTo('loggedOut'),
root: Ember.Route.extend({
index: Ember.Route.extend({
route: '/',
enter: function(router) {
var logged = getLoginState();
Ember.run.next(function() {
if (logged) {
router.transitionTo('loggedIn');
} else {
router.transitionTo('loggedOut');
}
});
}
}),
loggedIn: Ember.Route.extend({
connectOutlets: function(router, context){
...
}
}),
loggedOut: Ember.Route.extend({
connectOutlets: function(router, context){
...
}
})
...
我的index.html说,对的loggedIn视图
<!-- Template for out -->
<script type="text/x-handlebars" data-template-name="out">
<hr /><br />
<h1>Logged Out</h1>
<span>Login with "test/test"</span><br /><br />
<label>Username: </label>{{view Ember.TextField valueBinding="App.OutController.username"}}<br />
<label>Password: </label>{{view Ember.TextField valueBinding="App.OutController.password" type="password"}}<br />
{{#if App.loginController.isError}}
<span class="login-error">Error: Invalid username or password.</span><br />
{{/if}}
<br /><button {{action goLoggedIn href=true}}>Login</button>
</script>
现在我委托这个动作只是为了我的路由器。我知道,我可以委托这我的控制器,以及:
action login target="controller"
但在此之后,该怎么办transitionTo功能在我的路由器?因为我知道这不应该在我的控制器中完成。那么如何将它传递给我的路由器?可能是我错了,我不得不让{{action goLoggedIn href=true}}
。然后我的路由器将这个函数委托给我的控制器,并得到响应。我需要像App.LoginController.doLogin和goLoggedIn: Ember.Route.transitionTo('loggedIn')
之类的东西。当这种情况下如何实现它?
编辑:
喜欢这个?
App.Router = Ember.Router.extend({
//needs controller handling
goLoggedIn: Ember.Route.transitionTo('loggedIn'),
goLoggedOut: Ember.Route.transitionTo('loggedOut'),
root: Ember.Route.extend({
index: Ember.Route.extend({
route: '/',
enter: function(router) {
var logged = getLoginState();
Ember.run.next(function() {
if (logged) {
router.transitionTo('loggedIn');
} else {
router.transitionTo('loggedOut');
}
});
}
}),
loggedIn: Ember.Route.extend({
connectOutlets: function(router, context){
...
}
}),
loggedOut: Ember.Route.extend({
connectOutlets: function(router, context){
...
},
goLoggedIn: function(router, evt) {
router.get('inController').tryLogin()
router.transitionTo('loggedIn')
}
})
...
我得到:Cannot call method 'split' of undefined
编辑2:
它现在的工作。我不得不删除href=true
。谢谢
嘿如何从控制器转换controllers.send(“loggedIn”)? –
而不是'goLoggedIn:Ember.Route.transitionTo('loggedIn'),'我试过'goLoggedIn:function(router,evt)router.get('inController')。tryLogin() router.transitionTo('loggedIn ') }',但它说:''不能调用未定义的方法'split''' –