2017-12-04 6 views
0

현재 여러 입력이있는 양식이 있습니다. 이러한 입력은 쿼리 매개 변수를 채우는 데 사용됩니다. 이 라우트의 컨트롤러에서 제출 조치는 조회 매개 변수 입력을 등록하고 transitionToRoute를 사용하여 조회가 리턴하는 정보를 표시하는 중첩 된 라우트를로드합니다.EmberJS - 컨트롤러에서 중첩 경로로 쿼리 매개 변수 전달

다음은 컨트롤러의 관련 부분입니다 :

import Route from '@ember/routing/route'; 

export default Route.extend({ 
    queryParams: { 
    dateFrom: { as: 'meddateFrom', 
refreshModel:true}, 
    dateTo: { as: 'meddateTo', refreshModel:true}, 
    unitNumber: { as: 'medunitNumber', refreshModel:true}, 
    customerName: { as: 'medcustomerName', refreshModel:true}, 
}, 

    model(params) { 

     return this.get('store').query('option1api', params) 

     }, 

}); 

이 어떤 끔찍한 행동을 생산하고 있기 때문에 여기에 매우 잘못된 일을해야합니다 여기

import Controller from '@ember/controller'; 

export default Controller.extend({ 

    queryParams: ['dateFrom', 'dateTo', 'unitNumber', 'customerName'], 
    dateFrom: null, 
    dateTo: null, 
    unitNumber: null, 
    customerName: null, 

actions: { 
    submitQuery() { 
     switch (module) { 
     case 'Option 1 List': 
      this.transitionToRoute('reports.option1', { 
      queryParams: { 
       dateFrom: this.get('dateFrom'), 
       dateTo: this.get('dateTo'), 
       unitNumber: this.get('unitNumber'), 
      customerName: this.get('customerName'), 
      }, 
     }) 

      break; 
} 

중첩 된 경로입니다. URL 문자열에서 쿼리 매개 변수를 두 배로 늘립니다. 또한 입력이 변경 될 때 쿼리를 다시 실행하는 데 영향을주는 잘못된 param 업데이트 동작으로 끝납니다.

  • 나는 queryParams가 중첩 된 라우팅 쿼리가 실행되지 않고 아무것도 생성되지 않습니다에 개체를 포함하지 않는 경우. 내가 중첩 된 경로에 queryParams 별칭을하지 않는 경우

  • 은 내가 여러 컨트롤러에 중복 키 값을 가질 수 없음을 말해 오류가 나타납니다.

  • 위의 queryParams 대신 paramsFor를 사용하려고 시도했으나 결과를 생성 할 수 없습니다.

다시 제출 단추를 눌러 새로운 쿼리를 시작할 수 없습니다. 이미로드 된 경로로 전환하려고하기 때문에 이것이라고 가정합니다.

컨트롤러에서 상위 경로 (reports.js)로 queryParams를 이동하는 것을 고려했지만 이해할 경우 첫 번째 인스턴스에서 queryParams를 설정하는 컨트롤러가 필요합니다.

This question 매우 유사하지만 불행히도 많은 답변을 사용할 수 없습니다.

누구나 내 큰 실수를 발견하거나 올바른 방향으로 나를 가리킬 수 있습니까? EmberJS 가이드에서 제공되는 설명서는 현재 이해하지 못했습니다.

답변

0

내 접근 방식을 변경하여 직접 해결할 수있었습니다.

내 질문에 따라 컨트롤러에서 쿼리 매개 변수를 처리하는 대신 {refreshModel : true} 옵션을 사용하여 상위 경로로 이동했습니다.

let dateFrom = this.paramsFor('reports').dateFrom 
let dateTo = this.paramsFor('reports').dateTo 
let unitNumber = this.paramsFor('reports').unitNumber 
let customerName = this.paramsFor('reports').customerName 

let hash = {dateFrom, dateTo, unitNumber, customerName} 

return this.get('store').query('mymodel', hash) 

이 내 subroute가 queryparams를 읽을 수 있었고, 그때 내 모델 쿼리의 해시를 구성하는 변수를 사용할 수 있음을 확인 : 중첩 된 경로에서

나는 다음과 같은 추가.

위의 사례가 모범 사례인지는 모르겠지만 내 서브 루틴에 대한 실시간 새로 고침이 표시되어 실행되고 있습니다.