アプリ内の任意の場所に配置できるコンポーネント内に検索フィールドを配置したいと考えています。どのテンプレートにも表示することも、コンポーネントにネストすることもできます。検索フォームはユーザの入力(検索語)を受け入れ、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のアドホックサービスインジェクション ' globalSearch:Ember.inject.service() 'を使用することもできます。これは 'globalSearch:Ember.inject'と同等です。サービス( 'グローバル検索')、 – Ariella