ログイン/ログアウトのシナリオでは、残り火で条件付きルーティングを実装しました。
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
。ありがとう