3

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 に設定して、ログアウトがナビゲーション バーに表示されるようにします。

4

1 に答える 1

4

やってみました:

module.exports = App.LoginController = Ember.ObjectController.extend({
    needs: ['application']
    login: function() {
        if (authentification sucess) {
             this.set('controllers.application.isLoggedIn', true);
        } else {
             this.set('controllers.application.isLoggedIn', false);
        }            
    }
});

他のコントローラー インスタンスにアクセスするには、needsプロパティを使用します。指定された各コントローラーがプロパティに挿入されcontrollersます。そのneeds: ['application']ため、アプリケーション コントローラを に挿入しますcontrollers.applicaiton

于 2013-08-22T16:36:14.980 に答える