web-dev-qa-db-ja.com

Ember.jsのビューとコンポーネント

私はember.jsを学んでおり、ビューとコンポーネントの違いを理解しようとしています。私は両方を再利用可能なコンポーネントを作成する方法と考えています。

ビューに関するEmberのWebサイトから:

Ember.jsのビューは通常、次の理由でのみ作成されます。
-ユーザーイベントの高度な処理が必要な場合
-再利用可能なコンポーネントを作成する場合

Emberのコンポーネントに関するWebサイトから:

コンポーネントは、JavaScriptを使用して実装する動作と、Handlebarsテンプレートを使用して記述する外観を持つカスタムHTMLタグです。これらを使用すると、アプリケーションのテンプレートを簡素化できる再利用可能なコントロールを作成できます。

それでは、ビューとコンポーネントの主な違いは何ですか?そして、コンポーネントよりもビューを使用したい場合、またはその逆の場合の一般的な例は何でしょうか?

141
Bradley Trager

Ember.View

Ember.View は、現在W3Cによって作成されたタグに制限されています。しかし、独自のアプリケーション固有のHTMLタグを定義し、JavaScriptを使用してその動作を実装する場合はどうでしょうか。 Ember.View で実際にこれを行うことはできません。

Ember.Component

それがまさにコンポーネントでできることです。実際、W3Cが現在 Custom Elements 仕様に取り組んでいることは非常に良い考えです。

Emberのコンポーネントの実装は、可能な限りWebコンポーネント仕様に近づけるようにしています。 カスタム要素 がブラウザで広く利用可能になったら、EmberコンポーネントをW3C標準に簡単に移行し、それらを使用できるようになります。新しい標準を採用した他のフレームワークでも使用できます。

これは私たちにとって非常に重要であるため、コンポーネントの実装がWebプラットフォームのロードマップと一致するように、標準化団体と密接に協力しています。

また、 Ember.Component は実際には Ember.View (サブクラス)ですが、完全にisolatedであることに注意することも重要です。テンプレート内のプロパティアクセスはviewオブジェクトに移動し、アクションはviewオブジェクトも対象とします。周囲のcontextまたは外側のcontrollerへのアクセスはありません。すべてのコンテキスト情報はで渡されますが、 Ember.Viewの場合はそうではありません 周囲のコントローラーに実際にアクセスできます。たとえば、ビュー内でthis.get('controller')のような操作を行うと、現在ビューに関連付けられているコントローラーを取得できます。

それでは、ビューとコンポーネントの主な違いは何ですか?

そのため、コンポーネント以外の主な違いは、独自のタグを作成できることと、将来的に Custom Elements が利用可能な場合に、これらのコンポーネントを移行/使用することです。カスタム要素をサポートする他のフレームワークは、特定の実装ケースに応じて、ある時点でemberコンポーネントがビューをやや時代遅れにすることです。

そして、コンポーネントよりもビューを使用したい場合、またはその逆の場合の一般的な例は何でしょうか?

上記に従って、これは明らかにユースケースに依存します。しかし、経験則として、ビューで周囲のコントローラーなどにアクセスする必要がある場合は Ember.View を使用しますが、ビューを分離して必要な情報のみを渡す場合はコンテキストに依存せず、はるかに再利用できるようにするには、 Ember.Component を使用します。

それが役に立てば幸い。

更新

Road to Ember 2. の発行により、ほとんどの場合、ビューの代わりにコンポーネントを使用することが推奨されます。

169
intuitivepixel

答えは単純です:use components

2013年8月に記録されたトレーニングビデオによると、Yehuda KatsとTom Dale(Emberコアチームメンバー)は、フレームワーク開発者でない限り視聴者にビューを使用しないように言った。ハンドルバーの多くの機能強化とコンポーネントの導入により、ビューは不要になりました。ビューは、{{#if}}や{{outlet}}などを強化するために内部的に使用されます。

また、コンポーネントは、ブラウザに組み込まれるWebコンポーネント標準によく似ているため、快適にビルドすることには多くの副次的な利点がありますEmberコンポーネント。

2014-11-27を更新

Ember 2.0はコントローラー/ビューの代わりにルートが入力されるとRoutable Componentsを使用するため、ビューの代わりにコンポーネントを使用することがさらに重要になります。アプリを将来的に証明するには、ビューから離れることをお勧めします。

ソース:

16
Johnny Oshika

現状では-v2.xは現在の安定リリースです-ビューは完全に廃止されています。 ビューはEmber 2.0 APIから削除されていると言われています

したがって、Ember 2.0で{{view}}キーワードを使用すると、アサーションがトリガーされます。

アサーションに失敗しました:Ember 2.0で{{view}}またはそれに基づくパスが削除されました

Ember 2.0でビューを使用する必要がある場合は、 ember-legacy-views addonを使用できます。これはバージョンまでEmberと互換性があります2.4

まとめると、コンポーネントは現在(ビューは削除されています)であり、将来は-コンポーネントもコントローラーに置き換わります。 Routable Components RFC を参照してください。

5
Daniel Kmak