0

コンテンツ AppointmentController をフィルタリングし、event.startのみを返す目的で、ニーズ API を使用して AppointmentController にアクセスする CalendarController があります。しかし、私はfilter()forEach()を試しましたが、 event.startで利用可能なすべてのタイミングだけでなく、常にすべての異なるプロパティを返します。map()を使用すると、コンソールで必要に応じてevent.start値のみをマップに返しますが、ハンドルバーは何も表示しません。

u = App.__container__.lookup("controller:appointments");

y = u.get('content');

y.map(function(appointee) { return appointee.get('event.start') });

戻り値:

[Thu Jul 18 2013 01:00:00 GMT+0100 (GMT Daylight Time), Thu Jul 25 2013 01:00:00 GMT+0100 (GMT Daylight Time), Thu Jul 25 2013 01:00:00 GMT+0100 (GMT Daylight Time)]

map()とカレンダー テンプレートを使用する場合のjsfidleには何も表示されません。このjsfiddle USES FILTER ()とカレンダー テンプレートはコンテンツを表示しますが、event.start だけでなく、すべてのコンテンツを返し、何もフィルタリングしません。

 App.AppointmentsController = Ember.ArrayController.extend({ });

filter()を使用したCalendarscontroller todayEventプロパティ:

 App.CalendarController = Em.ObjectController.extend({
   needs: ['appointments'],

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

      var appCont = appoint.get('content');

      return appCont.filter(function(appointee) {
         return appointee.get('event.start');
      });
  }.property()

});

注記 {{name}} プロパティを追加して、todayEvent プロパティによって返されるものがevent.startによるフィルタリングではなく、'event.start' のみを返すのではなく、すべてのプロパティを返すことを示しました。

 <script type="text/x-handlebars" data-template-name='calendar'>

    <h1> from todayEvent</h1>
     {{#each todayEvent}}
        {{name}}<br/>
         {{event.start}}<br/>
     {{/each}}

ルーター

App.Router.map(function() {
  this.route('events');    
  this.resource('appointments');
  this.route('calendar', {path: '/cal'});
});

ember-モデルが使用されています: :

App.Appointment = Ember.Model.extend({
  name: Ember.attr(),
  event : Ember.belongsTo('App.Event', {key: 'event_id'})

});

App.Event = Ember.Model.extend( {
  title: Ember.attr(),
  start: Ember.attr(Date),
  end: Ember.attr(Date),
  allDay: Ember.attr(Boolean),
  appointments: Ember.hasMany('App.Appointment',  {key:  'appointment_ids'})
});
4

1 に答える 1

1

filter メソッドは、渡された関数が true と評価する列挙型を返すだけです。これまでと同じように map メソッドを使用できます。あなたのコード

y.map(function(appointee) { return appointee.get('event.start') });

期待どおりの開始日の配列を返します。タイプミスはカレンダー hbs にありました。

   {{#each todayEvent}}
     {{this}}
   {{/each}}

あなたのフィドル

于 2013-07-22T16:47:29.207 に答える