2017-11-07 3 views
1

私のshell.jsファイルのボタンにクリックバインディングがあります。クリックはあなたに戻ってきますDurandal routing IF文

function goBack() { 
return router.navigateBack(); 
} 

私はこの正確な動作をコピーしたくない特定のルート(reportForm)を持っています。私は戻る前に確認メッセージを導入しようとしています。

function goBack() { 

     if (router.routes[7].moduleId === "viewmodels/reportForm") { 
      return router.navigateBack(); 
     } else { 
      return app.showMessage(strings.logoutWarning, strings.logout, [strings.no, strings.yes]) 
       .then(function (answer) { 
        if (answer === strings.yes) { 
         return router.navigateBack(); 
        } 
       }) 
     } 
    } 

現在のルートがわからないようです。私は自分の現在のポジションを見つけ、これが一致するかどうかを調べる必要があります。現在、それが存在するかどうかをチェックするので、常に同じステートメントが返されます。私が上記のことを達成しようとすると、Durandalの経験を持つ人が私を助けることができたら、私はとても感謝しています。ここで

は私のデュランダルルータマップ(私はこのメッセージを表示したいそのreportForm)です:

function activate() { 
    router.map([ 
     { route: '', title: 'Welcome', moduleId: 'viewmodels/login', nav: true }, 
     { route: 'home', moduleId: 'viewmodels/home', nav: true }, 
     { route: 'log', moduleId: 'viewmodels/log', nav: true }, 
     { route: 'locationSelect', moduleId: 'viewmodels/locationSelect', nav: true }, 
     { route: 'history', moduleId: 'viewmodels/history', nav: true }, 
     { route: 'helpText', moduleId: 'viewmodels/helpText', nav: true }, 
     { route: 'scheduled', moduleId: 'viewmodels/scheduled', nav: true }, 
     { route: 'reportForm/:formId(/:templateId)', moduleId: 'viewmodels/reportForm', nav: true } 
    ]).buildNavigationModel(); 

    return router.activate(); 
} 

答えて

2

あなたはあなたがに移動しようとしているルートを与えるrouter.activeInstruction().params[0]値を確認することができます。 canDeactivate(またはこれを処理している他の場所)のライフサイクルコールバックでは、ロジックを配置して確認メッセージをユーザーに表示し、それに応じてナビゲートすることができます。試してみることができるものは -

function goBack() {  
     if (router.activeInstruction().params[0] !== null && typeof(router.activeInstruction().params[0]) !== "undefined" && router.activeInstruction().params[0].indexOf("reportForm") >= 0) { 
      return router.navigateBack(); 
     } else { 
      return app.showMessage(strings.logoutWarning, strings.logout, [strings.no, strings.yes]) 
       .then(function (answer) { 
        if (answer === strings.yes) { 
         return router.navigateBack(); 
        } 
       }) 
     } 
    } 

希望します。

+0

ありがとう@gkb。私は最終的に 'if(router.activeInstruction()。fragment.match(/^reportForm。* $ /))'を使ってそれを把握しました。 activeInstructionは私が知らなかった何かだった –

+0

@TomRudge - ええ、私はこのドキュメントを使っていたときに見つけられませんでした...ルータオブジェクトのデバッグには私のために似た問題がありました.. – gkb