2017-03-08 1 views
0

私は入れ子にされたコンポーネントを持っています。すべてのコンポーネントには、そのネストされたコンポーネントを表示するボタンがあります。問合せを行わずにember計算モデルデータをネストしたコンポーネントに渡すにはどうすればよいですか?

コントローラからは、すべてのコンポーネントを通じてselectboxオプション(ストアのクエリ)を渡します。しかし、selectboxを使って最終的なコンポーネントを表示/描画する前に、クエリが実行されます。実際のクエリは、このプロパティを持つ第2コンポーネントが描画される瞬間に実行されます。

selectboxを描画するために本当に必要となるまでクエリを実行しない方法はありますか?私は、ネストされたコンポーネント自体にストアプロパティをまっすぐ持っていないようにしました。 kumkanillamによって示唆されるように

EDITED

、彼のソリューションはかなりうまく働いていた、ここにアイデアを得るためのコードです。 controlerで

 reactionTimesForOptions: null, 
     allReactionTimes: function() { 
      return this.get("store").findAll("reaction-time"); 
     }.property("store"), 
     actions:{ 
      initialiseRatingOptionsData(){ 
       if(Ember.isEmpty(this.get("reactionTimesForOptions"))) { 
        this.set("reactionTimesForOptions", this.get("allReactionTimes")); 
      } 
     } 
のcontrolerのHBSで

{{#task-list 
    allReactionTimes=reactionTimesForOptions 
    initialiseRatingOptionsData=(action "initialiseRatingOptionsData")} 
{{/task-list}} 

その後、次の2つのネストされたコンポーネントに必要があるかをクリックして、私のコンポーネントを示すの時点で

allReactionTimes=allReactionTimes 
initialiseRatingOptionsData=initialiseRatingOptionsData 

そしてfinnalyで最終的な構成要素を表示することを決定するコンポーネント内のデータベースからのデータを有する

toggleRatingScreen(){ 
    this.initialiseRatingOptionsData(); /* at this point query are done since needed only at this point*/ 
    .... 
+0

「計算モデルデータ」とはどういう意味ですか?あなたは 'selectbox options'を参照していますか? – kumkanillam

+0

コントローラーのように: allWorkQualities:function(){ return this.get( "store")。findAll( "work-quality"); } .property( "store")、 "計算された"単語を削除する必要があります。 –

答えて

1

あなたはちょうどupdateSelectboxOptionsを呼び出すことができ、データを必要とするときは、selectboxオプションを更新する関数updateSelectboxOptionsとともに、およびネストされたコンポーネントにコントローラから空の選択ボックスのオプションのプロパティを渡すことができます。

+0

興味深いアイデアは、selectboxを使用してコンポーネントを表示するときに呼び出されるアクションの中でコントローラの "this.sendAction"クリックした? –

+0

はい。 'sendAction'の代わりにクロージャーアクションを使うことができます。クロージャアクションに関する詳細は、この[answer](http://stackoverflow.com/a/42296007/5771666)を参照してください。 – kumkanillam

+0

クロージャアクションでは、オプションの配列オブジェクトを返すことができるので、ネストされたコンポーネントを通してclojureアクション自体を渡す必要がありますか? –

関連する問題