2015-05-04 2 views
0

Мне интересно, как объекты с инжектированными объектами находятся в контроллерах.Масштабы зависимостей от впрыска Ember в контроллерах

Say создать сервис возвращает массив дней в месяцах, и я зарегистрировать его и ввести его в контроллер называется 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 массиву дат в моем шаблоне Bookings, но это не связано с логикой приложения, и оно не относится к основным данным модели (кстати, это привязка заказов). Я просто хотел, чтобы создать массив в мой контроллер и присвоить его свойству (в соответствии с выше кода), затем цикл его в шаблоне, например, так

<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.

С учетом вашего предполагаемого использования последнее кажется правильным.

Смежные вопросы