0

特定の日付に発生する日付を表示するコントローラー アクションを定義すると正しく動作しますが、そのコントローラー アクションをプロパティに変換すると、特定のイベントに発生する日付の表示が停止します。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 _

4

1 に答える 1

1

計算されたプロパティに「content.@each」を追加する必要があるようです。

現在のところ、「todayEvent」は「日付」が変更されたときにのみ計算されます。日付がコンテンツの前または同時に設定されていると推測しています。

フィルターではなくマップを使用しているため、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')
于 2013-07-22T21:04:14.527 に答える