Ember在控制器中注入依赖关系的范围

时间:2015-05-04 09:50:18

标签: ember.js

我想知道注入的对象是如何在控制器中作用的。

假设我创建了一个服务来返回几个月的数组天数,然后我将其注册并将其注入名为BookingsController的控制器中,就像这样

Todos.Bookingmonth = Ember.Object.extend({
      currMonth: 1,
      currYear : 2014,
      names : [ 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat' ],
      //
      setCurrMonthYear: function(currMonth, currYear){
        //
        this.currMonth = parseInt(currMonth, 10);
        this.currYear = parseInt(currYear, 10);
      },
      //
      getDaysArray : function () {
          //
          var date = new Date(this.currYear, this.currMonth - 1, 1),
              days = [];

          while (date.getMonth() === this.currMonth - 1) {
            //
            days.push({num : date.getDate(), name : this.names[date.getDay()]});
            date.setDate(date.getDate() + 1);
          }
          //
          return days;
      }
    });

    Todos.register('bookingmonth:main', Todos.Bookingmonth);

    Todos.inject('controller:bookings', 'bookingmonth', 'bookingmonth:main');



Todos.BookingsController = Ember.ArrayController.extend({
  title : "Bookings listing",
  monthDays : this.get('bookingmonth').getDaysArray(),// this.get is   undefined!!
  actions: {

  }
});

我想要这样做的原因是因为我需要访问我的预订模板中的n个日期数组,但这与应用程序逻辑无关,它既不属于主模型数据(这是预订的固定,顺便说说)。我只想在我的控制器中生成数组并将其分配给属性(按照上面的代码),然后在模板中循环它,就像这样

<ul id="month-bookings-slots">
  {{#each slot in monthDays}}
    <li>SLOT</li>
  {{/each}}
</ul>

我知道我可能会将while日期逻辑从服务转移到控制器本身,作为私人&#39;控制器的方法,然后可能更容易将其返回的日期数组分配给控制器的通用属性,但是想尝试通过服务来实现,因为它似乎更适合逻辑分离

也许我对注入的依赖项的范围感到有点困惑,听听我错过的内容/任何建议会很好。感谢

1 个答案:

答案 0 :(得分:0)

id未定义,因为它是在创建ArrayController的上下文中调用的。

你必须把它放进

this.get

monthDays: function(){return this.get(...);}

或在创建ArrayController之后调用的其他一些构造。

考虑到您的预期用途,后者似乎是正确的。