对于我的登录/注销场景,我在 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 表示已登录视图
<!-- 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}}
。然后我的路由器将这个功能委托给我的控制器,我得到一个响应。而不是让goLoggedIn: Ember.Route.transitionTo('loggedIn')
我需要像 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
. 谢谢