2014-04-14 3 views
1

하나의 경로에서 다른 경로로 전환 할 때 느슨하게하고 싶지 않은 쿼리 매개 변수가 있습니다. 문서에서이 솔루션은 ApplicationController에 설정된 전역 쿼리 매개 변수를 사용하는 것으로 보입니다. 글로벌 쿼리 매개 변수를 사용하는 방법

이의 내 설치가 있다고 가정 해 봅시다 :

  • 개체의 목록과 페이지가 표시되고 왼쪽에 약간의 CRITERIAS이 목록을 필터링 할 수 있습니다. 관련 컨트롤러 ListController을 호출 할 수 있습니다. 모든 기준은 쿼리 매개 변수 여야합니다.
  • 첫 번째 페이지의 개체를 클릭하면 전체 페이지가 해당 개체의 상세보기로 바뀝니다. 이 페이지에서 필자는 이전에 필터링 된 목록으로 돌아가서 쿼리 매개 변수를 유지할 수 있어야합니다.

일부 조작을 위해 ApplicationController의 글로벌 쿼리 매개 변수 ListController에 액세스해야합니다. 그것은 쉽게 :

기준 변경, 필터링 작업은 서버 측을 완료, 그래서 때 쿼리 PARAMS 변경 ListRoute를 새로 고침 할 필요가
App.ListController = App.ArrayController.extend({ 
    needs: "application", 
    qp: Ember.computed.alias("controllers.application"), 
    .... 

.

ApplicationRoute에서이를 수행하는 방법은 무엇입니까?

App.ApplicationRoute = Ember.Route.extend({ 
    actions: { 
     queryParamsDidChange: function() { 
     var listRoute = ??????; 
     listRoute.refresh(); 
     } 
    } 
} 

전체 설정에 대해 어떻게 생각합니까? 나는 좋은 길을 가고 있는가? 나는 확실하지 않다 ...

+0

는 아직이 알아 낸 적이 있습니까? – Paul

답변

0

이것은 내가 한 행동이다.

경로에서 queryParams가 정의됩니다. 이것은 자녀를위한 "부모"가 될 것입니다.

queryParams: 
    fooParam: 
    refreshModel: true 

설정 refreshModel : 실제 경로에 대한 beforeModel:, model:afterModel: 후크뿐만 아니라 모든 하위 경로를 트리거합니다. 현재, 자손에 대해이 동작을 개별적으로 켜거나 끌 수있는 방법은 없습니다. 컨트롤러의

그리고 그 컨트롤러

queryParams: ['fooParam'] 
fooParam: null 

queryParams 후크 경로에서 queryParams 후크를 무시할 것이 아니라, 전체 기능이 작동하기 위해 필요하고 보완하지 않습니다. 이 중 하나를 라우트의 컨트롤러에 넣거나 컨트롤러의 라우트에 속하는 것을 두지 마십시오.

모든 쿼리 매개 변수 키는 컨트롤러에서도 정의해야합니다. 이 후크의 값은 기본값입니다. 여전히 쿼리 매개 변수에 따라 변경됩니다.

다음

, 후손 경로,

model: -> 
    this.modelFor('parent').filterBy('childAttribute', this.paramsFor('parent').fooParam) 

를하거나 하나의 레코드 (기본적으로 첫 번째)하려는 경우 :

model: -> 
    this.modelFor('parent').findBy('childAttribute', this.paramsFor('parent').fooParam) 
관련 문제