Router

어플리케이션인 app = Woowahan()을 start 함으로서 전체 앱을 구동시킬 수 있습니다. start의 첫 번째 파라메터는 라우팅 경로와 연결될 View의 구성 정보로 이루어진 객체를 받습니다.

app.start({
  url: '/',
  view: MainView,
  container: 'body',
  pages: [
    { url: 'users', container: '.contents', view: UserView },
    { url: 'orders', container: '.contents', view: OrderView, pages: [
        { url: ':orderno', view: OrderDetailView, pages: [
            { url: 'edit', view: OrderEditView }
          ]
        },
        { url: 'search', view: OrderSearchView }
      ]
    }
  ]
});

위와 같은 앱의 라우팅 경로 구성은 다음과 같이 됩니다.

  • / => MainView
  • /users => UserView
  • /orders => OrderView
  • /orders/10 => OrderDetailView
  • /orders/10/edit => OrderEditView
  • /orders/search => OrderSearchView

뷰에서 라우트 경로 얻기

어플리케이션이 라우트 테이블 기준으로 동작시키는 뷰 이외에도 개별 뷰 컴포넌트에서 특정 라우트 경로로 이동해야하는 경우가 있습니다. 모든 뷰에는 this.getRouteTables 메소드가 제공되며 이 메소드를 이용하여 app.start에 기술된 모든 라이트 경로를 얻을 수 있습니다.

getRouteTables

메소드의 사용 방법은 다음과 같습니다.

/*
 * getRouteTables (ViewName [,Params][,QueryString])
 */

// UserView의 경로를 얻습니다.
this.getRouteTables('UserView'); /* '/users' 문자열 반환 */

// OrderDetailView의 경로 반환
this.getRouteTables('OrderDetailView', { orderno: 3 }); /* '/orders/3' 문자열 반환 */
// 배열을 이용한 방법. 이 경우 URL에 기술된 Params Key 순서와 입력된 배열의 순서가 일치해야 합니다.
this.getRouteTables('OrderDetailView', [3]); /* '/orders/3' 문자열 반환 */

// OrderSearchView의 경로 반환. QueryString 포함
this.getRouteTables('OrderSearchView', 'keyword=1234'); /* '/orders/search?keyword=1234' 문자열 반환 */
// params 가 있는 경우
this.getRouteTables('OrderSearchView', [], 'keyword=1234');
this.getRouteTables('OrderSearchView', {}, 'keyword=1234');

// 모든 경로 목록 얻기
let tables = this.getRouteTables();

// OrderDetailView 경로 얻기
tables.OrderDetailView({ orderno: 3}); /* '/orders/3' 문자열 반환 */

라우트 경로를 얻기위해 필수적인 키는 뷰 이름이 이용됩니다. 뷰 이름은 Woowahan.View.create 함수의 첫 번째 인수입니다. 그러나 라우트 테이블에 뷰를 연결할 때 뷰 이름과 다른 이름을 지정할 수 있습니다. 이 때는 뷰 이름을 알기위해 뷰 본체의 내용을 확인해야하는 번거로움이 발생합니다. 라우트 테이블 정의시 외부 참조용으로 뷰 이름의 Alias를 제공하며 다음과 같이 작성됩니다.

 app.start({
   url: '/',
   view: MainView,
   container: 'body',
   pages: [
     { url: 'users', container: '.contents', view: UserView, routeName: 'UsersView' },
     { url: 'orders', container: '.contents', view: OrderView, routeName: 'OrdersView', pages: [
         { url: ':orderno', view: OrderDetailView, pages: [
             { url: 'edit', view: OrderEditView }
           ]
         },
         { url: 'search', view: OrderSearchView }
       ]
     }
   ]
 });

routeName은 getRouteTables 호출의 키 로서 사용되며 기술하지 않으면 View 이름을 기본값으로 사용합니다.

results matching ""

    No results matching ""