控制器分配的模型无法从组件访问

时间:2015-04-16 22:05:35

标签: javascript ember.js ember-data

尝试从我的组件访问路由的setupController分配的模型。但只有我的console.log()日志是一个空对象,其中有3个其他与ember相关的对象,似乎未解决,但Ember Inspector表示我的所有Promise都已完成。我在main.hbs中的{{#each event in events}}工作正常......

全calendar.js:

import Ember from "ember";

    export default Ember.Component.extend({
      attributeBindings: ['id'],
        id: 'calendar',
        setEvents:function (){
          console.log(this.get("theEvents"));
        }.observes("theEvents"),
        _initializeCalendar: function() {
          var self = this;
          $("#calendar").fullCalendar({
            lang: 'de',
            header: {
                left: 'prev,next today',
                center: 'title',
                right: 'month,agendaWeek,agendaDay'
            },
            weekends: false,
            dayClick: function(date) {
              self.sendAction("dayClick",date);
            },
          });
        }.on('didInsertElement')
    });

main.hbs:

{{full-calendar theEvents=events dayClick="dayClick"}}

main.js

import Ember from "ember";

export default Ember.Route.extend({
  setupController:function(controller){
    controller.set('events', this.store.find('event'));
  }
});

1 个答案:

答案 0 :(得分:1)

我建议您在路线中使用model挂钩。

当Ember遇到model挂钩并且返回一个promise时,它会等待,直到承诺完成,然后继续进入setupController挂钩。您正在做的是提供尚未解决的承诺 - 因此在创建组件并执行didInsertElement时,承诺尚未解决。

import Ember from "ember";

export default Ember.Route.extend({
  model: function() {
    return this.store.find('event');
  },
  setupController:function(controller, model) {
    controller.set('events', model);
  }
});

您还可以在承诺的content和/或isFulfilled属性中设置观察者,并在那里做一些工作。当承诺得到解决时,它们会得到更新。

import Ember from "ember";

export default Ember.Component.extend({

  ...

  setEvents:function (){
    console.log(this.get("theEvents"));
  }.observes("theEvents.content", "theEvents.isFulfulled")

  ...

});