0

itemsコンポーネントを使用してそれぞれを表示するルート内のアイテムのリストがevent-itemあります。このコンポーネントには 2 つの計算済みコンポーネントがあり、現在いくつかのクラスを設定して、各アイテムに関する情報をユーザーに表示しています...

classNameBindings: ['winning','closed'],
item: null,
winning: Ember.computed('item.item_high_bid_user_id','userService.user_id',function(){
    return this.get('item.item_high_bid_user_id') == this.get('userService.user_id');
}),
closed: Ember.computed('item.item_status',function(){
    return this.get('item.item_status') === 2;
})

コンポーネント テンプレートでは、リスト内の各アイテムは、単一のアイテムを表示するルートにlink-toリンクする でラップされます。item

テンプレートとルートでも、テンプレート内のいくつかのものを表示または非表示にするために、対応するコンポーネントにあるおよび計算さitemれたものを観察したいと思います(IE。アイテムが閉じられている場合は入札セクションを非表示にするなど)winningcloseditem

これを行う適切な方法は何ですか?

ところで、私はEmber 2.2.0Ember Data2.2.0とEmber-cliを使用しています1.13.13

4

1 に答える 1

0

コンポーネントがルートにevent-itemリンクしている場合、項目モデルをヘルパーに渡していると仮定します。つまり、これらのプロパティを計算するために必要なすべての属性は、引き続きコントローラーで使用できるようになります。itemlink-toitem

// templates/whichever-template-holds-items.hbs
{{#each items as |item|}}
  {{event-item model=item}}
{{/each}}


// templates/components/event-item.hbs
<div>
  {{link-to 'item' model}} // pass model to item route
</div>


// controllers/item.js
import Ember from 'ember';

export default Ember.Controller.extend({
  // include userService

  winning: Ember.computed.equal('model.item_high_bid_user_id','userService.user_id'),
  closed: Ember.computed.equal('model.item_status', 2)
});


// templates/item.hbs
{{#if winning}}
  // show winning stuff
{{/if}}

{{#if closed}}
  // show closed stuff
{{/if}}

また、投稿したコードに==との両方が混在していることに気付きました。===ほとんどの場合、=== を使用したいと思うでしょう。この投稿を参照してください

ほとんど忘れていた - Ember.computed.equal


更新(以下のコメントに応じて)

コンポーネントの値が変更されたことをコントローラーに警告する方法はいくつかありますが、現在の状況ではどちらも実際には役に立ちません。

最初の方法 (これで問題ありません) は、DDAU (データを下に、アクションを上に) に従い、コンポーネントからコントローラーにアクションを送信することですが、これはコンポーネントがコントローラーのビュー内にある場合にのみ機能しますが、これはそうではありません。あなたがしていることのケース。

2 番目の方法 (これは理想的な IMO ではありません) は、サービスを一種の pub/sub 方式で使用して、離れたコンポーネント/コントローラーが互いに通信できるようにすることです (この方法の詳細については、こちらを参照してください)。アプリのデータフローを混乱させる可能性があるため、この方法で物事を行う限り、おそらくさまざまな反応が返ってくるでしょう。しかし、選択肢が限られている場合もあります。

以上のことから、アプリ間でデータをあるコントローラーから別のコントローラーに送信しようとするのではなく、おそらくコントローラーで再計算することに固執するでしょう。最終的には、コードは少なくなり、フレームワークの作業も少なくなります。これがお役に立てば幸いです。

于 2015-12-02T00:24:43.133 に答える