0

ember.js の新機能。私がやろうとしているのは、パスのない移行ルートを作成し、移行時に AJAX の約束をモデルとして渡すことができ、約束が完了するとリダイレクトの決定を行うことです。これが発生している間に LoadingRoute ビューが呼び出されるようにします。私は次のルートでそれを達成しようとしました:

App.LoginUserRoute = Ember.Route.extend({
    setupController: function(controller, model) {
        //Model should be a promise
        model.then(this.success.bind(this),this.failure.bind(this));
    },

    success: function (data) {
        if (data.success) {
            App.loggedInUser = App.User.create(data);
            console.log(App.loggedInUser);
            //Make redirection decision
        }
        else {
            alert(data.error);
        }
    },

    failure: function () {
        //Failure code
    }
});

ただし、次のようにプロミスをルートに渡そうとすると:

var request = $.post("api.php", {action: 'create_user', username: this.username, password: this.password});
this.transitionToRoute('loginUser',request);

「ルートの動的セグメントよりも多くのコンテキスト オブジェクトが渡されました: loginUser」というエラーが表示されます。これは、パスレス ルートを作成しようとしており、Ember では、transitionToRoute() を使用して渡されるときにモデルをパスにシリアル化する必要があるためです。

これが必要な理由は次のとおりです。

  • ログイン イベントは複数のコントローラーから発生する可能性があり (ユーザーが登録したとき、ログイン画面を使用してログインしたとき、または適切な Cookie が検出された場合にアプリケーションが最初に読み込まれたとき)、それらすべてのコントローラーでログイン ロジックを複製したくありません。 .
  • ログインが完了すると、返されたユーザー オブジェクトの性質に応じて、ユーザーを誘導できる複数の異なるルートがあります。
  • リクエストの完了中に LoadingRoute を呼び出す必要があります。

私の問題の解決策は、ルーティングを使用するのではなく、別のものを使用することだと思います。しかし、「何か他のもの」が何であるかはわかりません。

4

2 に答える 2

1

mixin を利用して、transition ルートにフックすることをお勧めします。

次の SO 回答は、すべてのニーズに対応します。

Ember クライアント側認証、ルート認証

于 2013-10-29T17:46:53.313 に答える