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]
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')