2013-07-10 3 views
2

다른 검색 결과를 얻는 검색 페이지가 있습니다. 검색 결과 목록에서 나는Emberjs에서 다른 모델로 한 경로에서 다른 모델로 전환

{{#linkTo 'someResources.someResource' result}}{{result.Name}}{{/linkTo}} 

를 사용하고 싶습니다 그리고 경로 someResources.someResource에 내가 검색 페이지에서보다 완전히 다른 모델을 사용하고 싶습니다. 어떻게해야합니까? linkTo에 대한 링크를 클릭하면 모델이 다시로드되지 않고 result 모델이 사용됩니다.

그래서 result의 값을 기준으로 someResources.someResource으로 이동할 때 모델을 다시로드하고 싶습니다.

App.SomeResource이라는 모델이 있고 해당 페이지로 바로 이동하면 작동하는 find 메소드가 있습니다.

답변

2

linkTo을 사용하여 전환을 수행 할 때 모델의 전체 재로드를 원한다는 것은 문제의 모델에서 주어진 모델을 사용하고 있기 때문에 작동하지 않습니다. 문제에 대한 해결책은 실제로 매우 간단합니다. 대신 일반 html a 태그를 사용하십시오. 내가하고 결국은했다이 :

<a {{bindAttr href="somePropertyInYourModel"}}>{{someTextProperty}}</a> 

속성 somePropertyInYourModel 새 페이지의 URL을 포함하는 속성입니다. 주소가 Ember 경로에있는 경우 주소 표시 줄에 주소를 입력하고 Enter 키를 누른 것처럼 페이지의 전체를 다시로드하지 않는 것처럼됩니다. 내가 좋아하는 뭔가를 쓸 수 있다면이 생각

은 엠버 개선 될 수있는 일을, 그것은 훨씬 더 좋은 것 :

App.Router.map(function() { 
    this.resource("resourceA", {{path: "/resourceA"}}, function() { 
     this.route("routeB", {{path: "/:prop1/:prop2/:prop3"); 
    } 
}); 

: 나는 설정이 경로를 제공

{{#linkToRoute "resourceA.routeB" params="val1,val2,val3"}}Go here{{/linkToRoute}} 

내가 받고 싶습니다 :

<a href="#/resourceA/val1/val2/val3">Go here</a> 

val1,val2,val3의 순서는 중요합니다. 순서가 바뀌면 최종 URL에서 변경해야합니다.

+0

흥미로운 해결책은 언제든 편리해야합니다. 단일 페이지 응용 프로그램 내에서 단일 모델을 다시로드하기 위해 전체 페이지를 다시로드하는 것은 지나치게 어렵다고 주장 할 수 있습니다. :) –

+0

하지만 전체 페이지를 다시로드하지 않는 것이 포인트입니다. :) 링크가 페이지의 Ember 컨텍스트에 있고 대상이 Ember 응용 프로그램 내에있는 경우 모델은 경로로 전달되는 대신 다시로드됩니다. 따라서 페이지는 모델을 다시로드하지 않습니다. 'transitionTo' 또는'linkTo'와 같지만 타겟이 모델을 해석하게합니다. –

+0

지금 봅니다. URL 위치는 해시 - 뱅 (hash-bang) 스타일이며, 나는 그것을 놓쳤다. 확실히 편리하다. 해시 쾅하지 않고 그것은 정기적 인 링크지만. –

2

당신이 발견 한대로 linkTo을 사용할 때 Ember는 model() 후크를 우회합니다. 가정은 모델을 전달 했으므로 그 모델을 으로 사용합니다 (result).

사용할 수있는 다음 훅은 setupController입니다. 직접 경로에서 작동하는 model 후크가 있으므로 여기에서 직접 호출 할 수 있습니다.

한 가지주의 할 점은 모델이 이미로드 된 직접 경로로드를 허용해야한다는 것입니다.

setupController: function(controller, model) { 
    if (!model.isModel) { 
    this.model().then(function(result)) { 
     controller.set('model', result) 
    } 
    } 
} 

model.isModel

linkTo로 전달 될 때 존재되어야 직접로드 모델에 isModel 속성을 통해이 체크된다.

참고 : 위의 코드는 model() 후크에 Promise을 반환한다고 가정합니다.

+0

문제가 훨씬 쉽게 해결되었다는 것을 깨달았습니다.'linkTo'를 사용하지 마십시오. :).대신에 나는 단지 정규'a'-tag를 사용하고'href'를 모델의 속성으로 묶을 수 있습니다. 훨씬 쉽고 깨끗합니다. –

+0

중첩되지 않은 리소스에서 작동 할 수 있습니다. 'linkTo'는 활성 경로에 대한 css 클래스를 설정하는'LinkView'도 제공합니다. –

+0

중첩 된 리소스에 잘 작동합니다. 일반적인 A 태그를 사용하면 모델을로드 할 수 있습니다. 마치 페이지를 새로 고치는 것과 거의 같습니다. –

관련 문제