1

私のデュランダル アプリケーションの shell.js のスタートアップ ロジックでは、いくつかの条件付きロジックに応じて、2 つの可能なビューのいずれかにユーザーを送信する必要があります。基本的に、特定のオプションが以前に選択されていない場合は、[セットアップ] ページに送信します。それ以外の場合は、通常の開始ページに送信します。

以前の Durandal 1.x では、activate を呼び出すときに開始モジュールを示す文字列を渡すだけでした。しかし、Durandal 2.x では廃止されました。

最初に、ルート配列の観点からこれを行うための推奨される方法は何ですか? どちらも開始モジュールではないかのように両方のルートを登録する必要があります (以下のように)。その後、条件付きで別のルートを配列にデフォルト ルート '' で追加しますか?

{ route: "setup", moduleId: "setup", title: "Setup", nav: false },
{ route: "Students", moduleId: "students", title: "Students", nav: false }

私の質問の 2 番目の部分は、どのモジュールが開始モジュールであるかを判断するための条件付きロジックの一部として、Web サービスを呼び出す必要性を処理する方法に関するものです。私のスタートアップ ロジックには、ブラウザのローカル ストレージのチェックが含まれますが、サーバーに ajax リクエストを送信して、ちょっとした情報を取得する必要がある場合もあります。

私の理解では、 router.activate() は約束です。実際に独自の約束を作成し、ajax 呼び出しが完了した後に router.activate() を呼び出して解決できますか? または、それを処理する必要がある別の方法はありますか? これを処理できると考えていた方法のサンプルコード:

var deferred = $.Deferred();

//Setup and conditional logic here
var routes = setupRoutes();

$.get('/api/myStartupEndpoint')
 .done(function(results) {
    //check results and maybe alter routes
    deferred.resolve(router.map(routes).activate());
 });

return deferred.promise();

それは理にかなっていますか?私はまだアプリを Durandal 2.0.1 に変換しているので、まだこれを試すことができませんでしたが、そうであるかどうかに関係なく、このシナリオで推奨されるアプローチが何であるかを知りたいです。

4

1 に答える 1