如何在不查询的情况下将ember计算模型数据传递给嵌套组件?

时间:2017-03-08 17:25:03

标签: ember.js ember-data

我有嵌套组件。每个组件都有按钮来显示其嵌套组件。

从控制器我通过所有组件传递选择框选项(商店查询)。但是在使用selectbox的最终组件甚至显示/绘制之前完成查询。在绘制具有此属性的第二个组件时,实际查询其完成。

有没有办法不做查询,直到它真的需要绘制选择框?我不想直接在嵌套组件中存储属性。

EDITED

正如 kumkanillam 所建议的那样,他的解决方案效果很好,这里有代码可以实现这个想法。

在控制器中:

        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"));
            }
        }

in controler hbs

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

然后在接下来的2个嵌套组件中

 allReactionTimes=allReactionTimes
 initialiseRatingOptionsData=initialiseRatingOptionsData

最终点击并显示需要从数据库获取数据的组件,在组件中决定显示最终组件

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

1 个答案:

答案 0 :(得分:1)

您可以从控制器传递空的selectbox选项属性以及将更新updateSelectboxOptions选项的函数selectbox,并在需要数据时在嵌套组件中调用updateSelectboxOptions