ember でログイン/ログアウト ウィジェットを作成しようとしています。ユーザーがログアウトすると False に設定され、ユーザーがログインすると True に設定されるように isLoggedIn プロパティを切り替えたいと考えています。 isLoggedIn はアプリケーション コントローラーで定義され、アプリケーション テンプレートのハンドルバーで呼び出されます。今のところ、ユーザーが正常にログインし、ログイン関数が LoginController 内でアクティブ化されたときに isLoggedIn の値を true に設定し、ユーザーがログアウトをクリックするとログアウトする必要があります。したがって、私の質問は次のとおりです。LoginController とアプリケーション コントローラーを相互にアクセスさせ、その中の変数を変更するにはどうすればよいですか。
アプリケーション テンプレートのコードを次に示します。
<section class="top-bar-section">
<!-- Right Nav Section -->
<ul class="right">
...
{{#if isLoggedIn}}
<li><a href="#" {{ action "logout" }}>Logout</a></li>
{{else}}
<li>
{{#linkTo "login"}}Login{{/linkTo}} </li>
{{/if}}
</ul>
</section>
</nav>
{{outlet}}
アプリケーションコントローラー:
var App;
App = require('app');
module.exports = App.ApplicationController = Ember.ObjectController.extend({
isLoggedIn: false,
logout: function(){
this.set("isLoggedIn", false);
console.log(this.token);
}
});
ログイン テンプレート:
...
<form class="form-horizontal" {{action "login" on="submit"}}>
...
<div class="row">
<div class="large-5 columns">
<label>Username</label>
{{input value=username type="text" placeholder="Username"}}
</div>
<div class="large-5 columns">
<label>Password</label>
{{input value=password type="password" placeholder="Password"}}
</div>
<div class="large-2 columns">
</br>
{{input class="small button" type="submit" value="Log In"}}
</div>
</div>
</form>
{{#if errorMessage}}
<div class="large-12 columns alert-box alert">{{errorMessage}}</div>
{{/if}}
{{/if}}
ログインコントローラー:
var App;
App = require('app');
module.exports = App.LoginController = Ember.ObjectController.extend({
//some variables...
//other functions...
login: function() {
// set isLoggedIn to true here
...}
});
最初に、ナビゲーション バーは isLoggedIn が false であることを認識し、ログインを表示します。正常にログインして送信をクリックすると、アクションが開始され、LoginController 内で login() がアクティブになります。ここで isLoggedIn を true に設定して、ログアウトがナビゲーション バーに表示されるようにします。