2016-03-19 13 views
0

2番目のモデルをコンポーネントに渡そうとしています。私はカテゴリー別に並べられたいくつかの本を持っています。カテゴリは複数選択ボックスで選択され、カテゴリに(私のdbに格納されている)コンポーネントに渡す必要があります。私は配列を必要とするカテゴリを変更する必要はありません。どこにどのように私はそれらを要求し、それらを渡す、私はそのコンポーネントに店を注入したくない場合は? (多対多の関係を構築する方法はありません。書籍にはカテゴリの文字列配列しかありません)。複数のストアデータをEmberコンポーネントに渡す

冊/ route.js

model() { 
    this.store.findAll('book'); 
} 

afterModel() { 
    this.set('categories', this.store.findAll('category'); 
} 

冊/ template.hbs

{{#each books as |book|}} 
    {{book-details book=book categories=categories}} 
{{/each}} 

コンポーネント/書籍・ディテール/ template.hbs:

は今、私はこれを行うにしようとしています

<h2>{{book.title}}</h2> 
{{#each categories as |category|}} 
    <p>{{category.name}}</p> 
{{/each}} 

このようなカテゴリでは機能しないので、店舗から取得してコンポーネントに渡す方法を見つける必要があります。

+0

コンポーネントはモデルを持たず、プロパティのみを持ちます。あなたのルートに2つのモデルがある場合、最初のものと同じ方法で2番目のモデルを渡すことができます。しかし、コードなしでは、あなたが実際にやっていることを推測することは難しいです。 – Jeff

+1

コントローラのカテゴリをルートではなく設定する必要があります。 '' 'setupController(コントローラ){ this._super(... arguments); this.store.findAll( 'category'、(categories)=> {controller.set( 'categories'}) } '' ' – jax

答えて

1

カテゴリafterModelを取得する必要がない場合は、このアプローチを検討してafterModel実装を削除することをおすすめします。問題のルート(すなわち/books/thug-kitchen)に関連付けられた単一のモデルがあります場合にのみ

model() { 
    return { 
    books: this.store.findAll('book'), 
    categories: this.store.findAll('category') 
    } 
} 

個人的に、私はルートのモデルを定義するに向かって移動しました。特定のルートに適用される複数のモデルがある場合は、プロパティを使用することをお勧めします。

0

より良いアプローチは、次のように、Ember.RSVP.hashを使用することです:

model: function() { 
    return Ember.RSVP.hash({ 
    books: this.store.findAll('book'), 
    categories: this.store.findAll('category') 
    }); 
}, 

setupController: function(controller, models) { 
    controller.setProperties(models); 
} 

サーバからの応答が遅れている場合、このコードは、ほとんど正常に動作します。タイラーのアプローチはうまくいくが、探索が完了する前にルートへの移行が早すぎる。私はEmber Dataを使っているので彼のアプローチはうまくいくと思いますが、もっと一般的なPromiseなら、うまくいきません。私はもっ​​と説明することができればいいと思っていますが、私自身の理解はまだ非常に基本的です。

その後、両方のモデルをコンポーネントに渡す際に問題はありません。

関連する問題