2017-01-22 7 views
2

おはようございます!私のAurelia-Appでは、viewModelを使用して、navigationStrategy(ルートパラメータを読み込み、それに応じてビューを設定)でさまざまなビューを処理しています。Aureliaはナビゲート時に「リフレッシュ」しません

私は同じViewModelに基づいているルート間を移動し続け、ViewModelには、「リフレッシュ」しません:

ナビゲーションは、しかし、一つの問題があり、baiscallyうまく機能します。最初に別のviewModelを使用して別のルートにナビゲートした後、意図したルートに戻ったときにのみ、内容が期待どおりに表示されます。

コンポーネントのライフサイクルフックが蹴られていないようです。手動でunbind()とdetached()をトリガする方法はありますか?あるいは、一般的にやり方をする良い方法がありますか?

また、ルート構成はちょっと変わったようです。私がmoduleIdを取り除くと、アプリケーションがクラッシュし、layoutViewModelを取り去ると、データはビューにバインドされません。私の回避策は空のviewModel +空のテンプレートを割り当てることです。私はこれを間違って使っていますか?

大きな感謝!

configureRouter(config, Router) { 

    var getModelStrat = (instruction) => { 
    instruction.config.layoutView = "pages/templates/"+instruction.params.model+".html" 
    } 

    config.addAuthorizeStep(AuthorizeStep); 
    config.title = 'Aurelia'; 
    config.map([ 
    { 
     route: 'detail/:model/:id?', 
     name: 'detail', 
     moduleId: 'pages/empty', 
     layoutViewModel: 'pages/detail', 
     auth: true, 
     navigationStrategy: getModelStrat 
    }, 
    {...} 
    ]); 
} 

答えて

4

これは仕様です。ルータは既存のビューモデルを再利用しようとします。

このビューあたりのモデルをオーバーライドする必要がある場合は、それにdetermineActivationStrategy()メソッドを作成し、activationStrategy.replaceを返す:

import { activationStrategy } from 'aurelia-router'; 

export class SomeViewModel { 
    // ... 

    determineActivationStrategy() { 
     return activationStrategy.replace; 
    } 

    // ...   
} 

あなたは、各ビューモデル/ルートのためにこれをオーバーライドする必要がある場合は、その後のためにMarton Sagi's answerを見てみましょう同様の質問。基本的に、あなたのルートはすべてactivationStrategy: 'replace'と定義する必要があります。

関連する問題