0

手動でページを更新するか、このようなリダイレクトを設定すると

}).then(function() {
  document.location = "/";
}, function() {

Ember アプリの関数で、Ember コントローラーのプロパティが設定されていません。どのプロパティが設定解除されるかが重要かどうかはわかりませんが、そうなった場合に備えて、コードを次に示します。アプリケーション テンプレートで、ユーザーが認証されているかどうかを確認します

    {{#if isAuthenticated}}
         blah blah
    {{else}}
        blah blah
    {{/if}}

プロパティは AuthController で設定されます

App.AuthController = Ember.ObjectController.extend({
    currentUser: null,
    isAuthenticated: Em.computed.notEmpty("currentUser.email"),
    login: function(route) {
      var me;
      me = this;
      return $.ajax({
        url: "/users/sign_in.json",
        type: "POST",
        data: {
          "user[email]": route.currentModel.email,
          "user[password]": route.currentModel.password
        },
        success: function(data) {

          me.set('currentUser', data.user);

そのため、ページを更新した後、私の currentUser は (Ember によると) 認証済みとして表示されなくなりました。ただし、(Ruby on Rails) サーバー側では、ユーザーは引き続き認証されます。チェックするためにこのコードをレイアウトに配置すると、Ember が (ページの更新により) 私がサインアウトしたと判断した後も、私のサーバー コードは私がサインインしていることを伝えています (実際には私はサインインしています)。

    <% if current_user %>
    there is a current user
    <% end %>

なぜこれが起こっているのか説明できますか?

4

2 に答える 2

1

手動でページを更新するのはなぜですか? この方法では、ブラウザを最初から完全に開始しているため、Ember アプリが再度初期化され、プロパティ currentUser がコントローラーに設定されません。

これを行う代わりに:

}).then(function() {
  document.location = "/";
}, function() {

アプリのスタートページに行きたいと思います(「/」に行きたいので)。代わりに、ルート間を遷移する Ember 機能を使用する必要があります。上記のコードを実行する場所はわかりませんが、コントローラーの 1 つまたはルートで実行できます。

コントローラーでは、 transitionToRouteを使用できます。

// index is a Route which is implicitly generated by Ember for you
this.transitionToRoute('index');

ルーターではtransitionToを使用できます:

this.transitionTo('index');
于 2013-10-01T08:12:36.683 に答える