Emberjs-1.0.0-rc.6 использует перечисляемый список событий, происходящих в определенную дату

Когда я определяю действие контроллера для отображения дат, происходящих с определенной датой, оно работает правильно, но если я преобразую это действие контроллера в свойство, оно перестает отображать дату, происходящую для определенного события. JSFIDDLE

 App.EventsController = Em.ArrayController.extend({
   todayEvent: function(date){
     return this.get('content').filter(function(event) {
       return (moment(event.get('start')).unix() == moment(date).unix());
     });
   }
});

Я могу получить экземпляр контроллера:

 u = App.__container__.lookup("controller:events")

на событии 25-го есть 2 события, и я могу получить их с

u.todayEvent(new Date('2013-07-25').toString())

который правильно возвращает

[> Class,  > class]

Но в контроллере CalendarEvent я хочу отображать события для определенной даты, как и выше, но на этот раз с использованием свойства computed -property, поэтому я переопределяю вычисляемое свойство todayEvent как показано ниже, только на этот раз он возвращает только true или false вместо возврата Объекты класса, связывающиеся с событиями того дня.

Свойство date устанавливается с помощью controllerFor в хеш-сериализаторе маршрутизатора, а не передаёт его, как мы это делали, когда определяли todayEvent как действие контроллера ранее.

 App.CalendarEventController = Em.ObjectController.extend({
    date: null,
    needs: ['appointments'],

    todayEvent: function(){
      var _self = this;
      var appoint = _self.get('controllers.appointments');
      var appCont = appoint.get('content');

      return appCont.map(function(appointee) {
        return (moment(appointee.get('event.start')).unix() == moment(_self.get('date')).unix());    
      });
  }.property('date')    
});

Теперь я нажимаю на ссылку для встречи, затем на ссылку для календаря и затем нажимаю на одну из дат в календаре красным цветом, чтобы ловушка сериализатора могла установить дату контроллера, и затем я захожу в консоль:

u = App.__container__.lookup("controller:calendarEvent")

попробуйте получить события, происходящие в этот день в консоли, с помощью:

u.get('todayEvent')

Я либо получаю пустой массив, подобный этому [ ], или если я фильтрую, используя map() вместо filter (), он возвращает [false, false, false]

JSFIDDLE

1 ответ

Решение

Похоже, вам нужно добавить "content.@ Each" к вашему вычисляемому свойству.

В настоящее время "todayEvent" будет вычисляться только при изменении "date". Я предполагаю, что дата устанавливается до или одновременно с содержимым.

todayEvent возвращает [false, false], потому что вы используете карту, а не фильтр.

todayEvent: function(){
  var _self = this;
  var appoint = _self.get('controllers.appointments');
  var appCont = appoint.get('content');

  return appCont.filter(function(appointee) {
    return (moment(appointee.get('event.start')).unix() == moment(_self.get('date')).unix());    
  });
}.property('content.@each', 'date')
Другие вопросы по тегам