2017-12-17 6 views
2

쿼리 매개 변수가 변경되면 모델을 새로 고치기 위해 queryParam 설정을 경로에 설정했습니다. 그러나 쿼리 매개 변수가 변경되면 setupController이 호출되지 않습니다. 왜 이런 일이 일어나는 지 아십니까? Query Param이 경로를 새로 고치지 않음

export default Route.extend({ 
    queryParams: { 
    id: { 
     refreshModel: true 
    } 
    }, 

    setupController(controller) { 
    controller.start(); // fetches data synchronously from api 
    } 
}); 

는 // 솔루션 덕분에 이제

export default Route.extend({ 
    queryParams: { 
    id: { 
     refreshModel: true 
    } 
    }, 

    model() { 
    // Returning a new array/object/value everytime the hook is called, causes the 
    // setupController hook to be called. 
    return []; 
    } 

    setupController(controller) { 
    controller.start(); // fetches data synchronously from api 
    } 
}); 

답변

3

refreshModelrefresh에 경로를 강제로 예상대로 beforeModel, model, afterModelsetupController 후크 실행하는 기대한다 답장을 alptugd합니다. 하나; setupController 후크에 대한 사소한 차이가있다 :

source code 또는 relevant API documentation에 엠버의 route.jsrefresh 방법에 대한 의견을 살펴보십시오. 두 말 :.

은 "다른 경로에서 전환 할 때 경로를 입력하는 방법과 유사한 방식으로 beforeModel, modelafterModel 갈고리를 발사,이 경로 및 하위 경로에 모델을 새로 고침 현재 경로 PARAMS (예 : article_id)가 각각의 모델 후크로 전달되고 다른 모델이 반환되면 setupController 및 관련 경로 후크가 다시 발사됩니다. "

이것은 의미합니다. refresh이 발생하는 경우 setupController이 트리거되도록하려면 다른 모델은 model 후크에서 반환되어야합니다. 당신의 경우에; 어떤 모델도 가지고 있지 않다. hook; 따라서 id 매개 변수 값 변경시 setupController이 호출되지 않습니다.

그건 그렇고; 속성을 controller에 저장하는 것이 유일한 목적이기 때문에 setupController 후크를 무시하는 경우 super 메서드를 호출하는 것이 좋습니다. 이 케이스에 대한 자세한 설명은 API을 참조하십시오.

+0

감사합니다. 모델 훅에서 빈 배열을 반환하면 모델 훅이 호출 될 때마다 다른 값을 반환하므로 setupController가 호출되었습니다. 그것은 효과가있다! 비록 우리가 희미한 diffing을 가지고 있기 때문에 ember가 중복 최적화를 수행하고있는 것처럼 보입니다. 컨트롤러에서 동기식으로 모델을 설정 중이므로 Btw, 의도적으로 슈퍼를 호출하지 않습니다. – dorindo

+1

@dorindo 당신에게 도움이 된 것을 기쁘게 생각합니다. "컨트롤러에서 모델을 동 기적으로 설정하고 있습니다." 당신이하는 일을 안다면 괜찮습니다. 엠버는 수시로 까다로울 수 있습니다. 나는 단지 더 이상의 문제를 예방하기 위해 경고하고 싶었다. 행운을 빕니다. 도중에 투표를 해 주셔서 감사합니다. – alptugd