2017-02-13 11 views
3

2 열 레이아웃 설정이 있습니다. 두 열은 매우 비슷한 기능을 가지고 있으므로 매우 동일한보기 모델이 다시 사용됩니다. Hovewer, 어느 쪽이 렌더링되는지에 따라 렌더링이 약간 다를 수 있으므로보기 포트 정보에 어떻게 액세스 할 수 있는지 궁금하십니까?Aurelia -보기 포트가 렌더링되는 뷰 모델입니까?

이 설정을 고려 :

export class App { 
    configureRouter(config: RouterConfig, router: Router): void { 
     config.map([ { 
      route: '', 
      name: 'home', 
      viewPorts: { 
       left: { moduleId: 'module1' }, 
       right: { moduleId: 'module1' }, 
      } 
     }]); 
    } 
} 

app.html

<template> 
    <router-view name="left"></router-view> 
    <router-view name="right"></router-view> 
</template> 

module1.js을 app.js를

export class Module1 { 
    activate(params: Object, routeConfig: Object, instruction: NavigationInstruction): void { 
     //which view port am I being rendered in? 
    } 
} 

답변

2

내 해결책은 탐색 명령의 뷰포트 명령 객체를 검색하고 이것이 매우 동일한 객체 인스턴스인지 비교하는 것이 었습니다. 그렇게하기위한 편리한 방법을 만들었습니다.

탐색 - 명령 - extension.js

import {NavigationInstruction} from 'aurelia-router'; 

NavigationInstruction.prototype.viewPortFor = function(viewModelInstance: Object): string { 
    for (let key in this.viewPortInstructions) { 
     let vpi = this.viewPortInstructions[key]; 
     if (vpi.component.viewModel === viewModelInstance) 
      return key; 
    } 
    return undefined; 
} 

module1.js

import 'navigation-instruction-extension.js'; 

export class Module1 { 
    activate(params: Object, routeConfig: Object, instruction: NavigationInstruction): void { 
     instruction.viewPortFor(this); //returns either 'left' or 'right' 
    } 
} 
+0

더 나은 방법이 있어야 할 것처럼 보이지만, 방금 30 분을 보냈고'activate()'함수에 전달 된 매개 변수에서 간단한 답을 찾을 수 없었습니다. – LStarky

+0

나는 이것이 지금까지 최고의 해결책이라는 것을 알아 내려고 노력했다. – balazska

+0

프레임 워크에 의해'activate()'의 매개 변수로 보내지는 것이 가장 좋을 것입니다. 나는 이것에 대한 홍보를 만들거야. – balazska

0

나는 새로운 풀 요청을 추가 한 새로운 버전이 출시, 뷰포트의 이름 정기적 인 라이프 사이클 매개 변수를 통해 액세스 할 수 있습니다.

activate(params: Object, routeConfig: Object, instruction: NavigationInstruction): void { 
    routeConfig.currentViewPort //the name of current viewport 
}