앱의 어느 위치 에나 배치 할 수있는 구성 요소 안에 검색 필드가 있어야합니다. 모든 템플릿에 표시되거나 구성 요소에 중첩 될 수 있습니다. 검색 양식은 사용자 입력 (검색어)을 수락하고 submit
은 결과 템플릿으로 전환하는 검색 작업을 트리거합니다.Ember : 전 세계에서 사용할 수있는 검색 구성 요소 (및 작업)?
간단하지만 충분히 작동 할 수있는 방법을 생각할 수 없습니다. 내가 할 수 있다면, 처음에 입력 된 용어를 어떻게 행동에 전달합니까? Ember CLI로 양식 제출을 처리하는 방법에 대한 놀랍도록 작은 정보가 있습니다.
지금까지 나는 action = '/ results'을 가진 정규 양식을 제출했습니다. 하지만 그것은 분명히 앱을 다시로드하고 있습니다.
이 같은 인덱스 컨트롤러에서 작업을 만드는 장난 봤는데 :
export default Ember.Controller.extend(defaultParams, {
term: '',
actions: {
keywordSearch() {
this.transitionToRoute('results', { queryParams: { q: this.get('term') }});
}
}
});
그런 다음 인덱스 템플릿에서 깊은 2 중첩 내 검색 구성 요소, 아래로 폐쇄 조치를 전달합니다.
index.hbs :
{{index-search keywordSearch=(action "keywordSearch")}}
인덱스 search.hbs (성분)
{{search-field keywordSearch=keywordSearch }}
검색 field.hbs (중첩 된 요소)
<form {{ action (action keywordSearch) on='submit' }}>
{{ input value=term }}
<button type="submit">Search</button>
</form>
그리고 작업을 실행하지만 term
은 제공되지 않습니다. 폐쇄 조치에 term
을 어떻게 보냅니 까?
그리고 ... 정말 검색 필드가 앱에 표시 될 모든 장소로 작업을 전달해야합니까, 아니면 더 쉬운 방법일까요?
니스! 훨씬 더 합리적인 접근 – tarponjargon
+1. 추가 제안. 또한 서비스의 이름을'app/services/global-search.js'로 변경하고 Ember의 ad-hoc 서비스 인젝션 'globalSearch : Ember.inject.service() '를 사용할 수 있습니다. 이것은'globalSearch : Ember.inject'와 같습니다. 서비스 ('글로벌 검색'), – Ariella