2017-08-08 1 views
0

aureliaには何らかの方法がありますが、別のビューを動的にレンダリングできますか?Aureliaで動的に異なるビューをレンダリングする

async Activate(booking) { 
    //booking: is the route param 
    const hasRecord = await this.service.RecordExists(booking); 
    if (hasRecord) { 
      map(booking,form); 
    } 
    return { 
     //Render different template 
    } 

} 

答えて

2

別の方法でこの問題に取り組まなければなりません。なぜそれを使用せず、別のViewModelを読み込むために、ViewModelにナビゲートしてその作成をトリガーしたいのですか?最高の効率で非効率だと思われますか?

Aureliaはルータのパイプラインを公開していますので、このチェックを行い、それに応じてリダイレクトしてください。予備活性化のステップhereを見て、あなたはこのような何か(擬似コード)を書くことができます:あなたは、たとえばユーザーを持っているあなたは、リダイレクトを望んでいないケースを持つことができます

configureRouter(config, router) { 
    function step() { 
     return step.run; 
    } 
    step.run = async (navigationInstruction, next) => { 
     if(await this.service.RecordExists(navigationInstruction.queryParams...) 
     { 
     return next() 
     } else { 
     next.cancel(new Redirect('your other page')) 
     } 
    }; 
    config.addPreActivateStep(step) 
    config.map([ 
     { route: ['', 'home'],  name: 'home',  moduleId: 'home/index' }, 
     { route: 'users',   name: 'users',  moduleId: 'users/index', nav: true }, 
     { route: 'users/:id/detail', name: 'userDetail', moduleId: 'users/detail' }, 
     { route: 'files/*path',  name: 'files',  moduleId: 'files/index', href:'#files', nav: true } 
    ]); 
    } 

EDIT

ブックマークBASEURL /てBusinessObject/IDに望む、そしてオブジェクトが実際に は、その後、あなたのViewModelにgetViewStrategy()機能を使用することができますが存在する前に、URLがナビゲートです:

getViewStrategy(){ 
    if(this.businessObj){ 
     return 'existingObjectView.html';  
    } else { 
     return 'nonExisting.html'; 
    } 
} 
+0

ありがとうあなたのコードを見て、返信してください。リダイレクトが起こっていると思われますので、避けたいURLを変更してください。 next.cancel(新しいリダイレクト( 'あなたの他のページ'))。 – crypted

+0

リダイレクトを避けたい理由を説明できますか?あなたは同じviewmodelで2つのビューを使い、2つのルートを用意するだけで簡単に設定できます。あなたは '' 'compose''要素を使って問題を解決することができますが、複雑さが増し、あなたのケースに追加の値が表示されません –

+0

、このページをブックマークすることができます。利用可能かもしれません。 – crypted

関連する問題