特定の日付に発生する日付を表示するコントローラー アクションを定義すると正しく動作しますが、そのコントローラー アクションをプロパティに変換すると、特定のイベントに発生する日付の表示が停止します。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コントローラーでは、上記のように特定の日付のイベントを表示したいのですが、今回は計算プロパティを使用するため、以下に示すようにtodayEventを計算プロパティとして再定義します。今回のみ、返す代わりにtrueまたはfalseのみを返しますその日のイベントを含むクラス オブジェクト。
date プロパティは、todayEvent をコントローラー アクションとして定義したときに行ったように渡す代わりに、ルーター シリアライザー フックで controllerFor を使用して設定されます。
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')
});
ここで、予定のリンクをクリックしてから、カレンダーのリンクをクリックし、カレンダーから赤で示された日付の 1 つをクリックします。これにより、シリアライザー フックがコントローラーの日付を設定できるようになり、コンソールに移動します。
u = App.__container__.lookup("controller:calendarEvent")
その日に発生したイベントをコンソールで取得してみてください:
u.get('todayEvent')
この[ ]のような空の配列を取得するか、 filter( )の代わりにmap()を使用してフィルタリングすると、[false, false, false]が返されます。
jsfiddle _