2015-05-04 76 views
0

我想知道如何注入对象的范围在控制器中。Ember的范围在控制器中注入的依赖关系

说我创建一个服务于月返回天的数组,我注册,并在一个名为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: { 

    } 
}); 

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

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

我知道我大概可以移动,同时从日期逻辑该服务作为控制器的'私有'方法,并且可能更容易将其返回的日期数组分配给控制器的通用属性,但希望尝试通过服务来完成似乎更好的逻辑分离

也许我对注入的依赖关系的范围有点困惑,会很高兴听到我失踪/任何建议。谢谢

回答

0

this.get是未定义的,因为它是在创建ArrayController的时间和上下文中调用的。

你得把这个变成

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

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

或者是创建ArrayController后叫一些其他结构。

随着您的使用目的,后者似乎是正确的。