2017-02-10 6 views
1

私は現在、いくつかのコンポーネントプレースホルダ(メニュー、ブレッドクラム、関連アイテム)を持つEmber 2.11アプリケーションテンプレートと、うまく動作するメインコンテンツを表示するコンセントを持っています。基本についてもっと気楽になったので、パンくずリストを作ろうと思っています。複数のコンポーネントのデータを提供するemberjs

私はサービスについて読んだが、それはそれが永続的である必要がないためパンくずみのための適切な解決策であるとは思わない。それはルートに基づいていますが、素敵なタイトルを使用したいので、ルートを文字通り使用したくないし、特定のアイテムを表示するときに、ルートがパンくずましの表示内容を正確に反映していない。

パンくずリストは、ディスプレイに使用されているモデルに基づいているため、パンくずリストオブジェクトを作成し、アプリケーションテンプレートからコンポーネントに渡すことができるはずです。私はこれが当日のコントローラの目的だと思います。私の考えは、ブレッドクラムのオブジェクト/プロパティを構築し、それをRSVPのようなモデルで返すという考え方でした。そして、テンプレート内の両方にアクセスして、適切なオブジェクトを適切なコンポーネントに渡すことができました。しかし、ルートがEmberデータオブジェクト、約束またはJavascript配列を返さなければならないので、それは間違っているようです。

私の現在の考え方は、これらの線に沿っています。

template/application.hbs

route/category/show

export default Ember.Route.extend({ 
    model(params) { 
    let recipe = this.get('store').query('recipe', { category: params.category_id}); 
    let crumbs = [{name: 'Category', link: 'category'}, 
        {name: recipe.category.title, link: 'category.show', target: recipe.category.id}]; 
    return {recipe: recipe, breadcrumbs: crumbs}; 
    } 
}); 

私がこのアプローチするか、これはエンバーデータをフェッチする非同期データに問題が発生する場合は正しい方法であるかはわかりません。私はレシピ(ルートは/レシピ/レシピID)を表示しているが、ブレッドクラムはHome > Categories > Main Dishes > My Awesome Dishと表示されているときに柔軟性を提供するように、このような何かは、各ルートで定義する必要があります。

どのように問題にアプローチしますか?

は、2017年2月10日更新:

をそのモデルは、アプリケーションテンプレート、唯一のルートテンプレートに渡されていないことが表示されます。私はどのようにアプリケーションテンプレートに 'down'データを渡すか分からない。あなたのコントローラで、これを持って

export default Ember.Route.extend({ 
    model(params){ 
     let recipe = ...; 
     let crumbs = ...; 

     return {...}; 
    }, 
    setupController(controller, model){ 
     this._super(controller, model); 
     controller.set('variable', model); 
    } 
}); 

:あなたは、あなたがこのようなものが必要アクセスしているルートであなたのコントローラの変数としてモデルを渡したい場合は、あなたの思考のラインに残っている

答えて

0

あなたのテンプレートで表示する変数を作成することができますEmber.computed

this.get('variable'); 

そして中:このようなパン粉​​にアクセスすることができます。

申し訳ありませんがコードを最小限に抑えるために私は自分のコンピュータにいません。

もう1つのアプローチは、アプリケーションコントローラのinitでcrumbs変数を設定することです。これにより、そのコントローラで定義された変数がアプリケーションにグローバルに設定されるため、他のコントローラからアプリケーションコントローラを変更できます。 didUpdateAttrs()またはdidUpadteElement()である。

これで問題が解決します。

挨拶

0

おそらくserviceの要素を追跡することによって、このようなブレッドクラムを作成することもできますが、私はember-crumblyアドオンをチェックアウトしたいです。それはあなたのニーズを満たすように思えます。

関連する問題