2017-03-08 36 views
0

我有嵌套組件。每個組件都有按鈕來顯示其嵌套組件。如何在不查詢的情況下將ember計算的模型數據傳遞給嵌套組件?

從控制器I穿過所有部件選擇框選項(上存儲查詢)。但是查詢是在最後一個選擇框甚至顯示/繪製組件之前完成的。在繪製第二個具有此屬性的組件時,實時查詢它的完成情況。

有沒有辦法不這樣做,直到查詢其真正需要的選擇框來界定呢?我不想直接在嵌套組件本身中存儲屬性。

EDITED

正如kumkanillam建議,他的解決方案的工作非常好,這裏是代碼的想法。

在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

你說的'計算模型data'是什麼意思?你指的是'選擇框選項'嗎? – kumkanillam

+0

在控制器等: allWorkQualities:函數(){ 返回this.get( 「商店」)的findAll( 「工作質量」); } .property(「store」), 我想我應該刪除「計算」單詞 –

回答

1

您可以通過從控制器空屬性選擇框的選項與功能updateSelectboxOptions將更新selectbox選項,並會在嵌套的組件時,你需要的數據,你可以叫updateSelectboxOptions

+0

哦,這是一個有趣的想法,你的意思是與像控制器裏面的「this.sendAction」調用按鈕來顯示組件與選擇框點擊? –

+0

是的。而不是'sendAction',你可以使用閉包動作。你可以按照這個[回答](http://stackoverflow.com/a/42296007/5771666)瞭解關於關閉操作的更多信息。 – kumkanillam

+0

使用閉包動作,我可以返回選項數組對象,所以我需要只通過clojure行爲本身通過嵌套組件? –

相關問題