2

コントローラーをemberjs componentに渡しています。コントローラーには、日付の配列を保持するdateArrayと呼ばれる計算されたプロパティがあります。予定テンプレートを指す#linkToをクリックした後、コンソールに移動して次の操作を実行できます。

    b = App.__container__.lookup("controller:appointment")
    c = b.get('dateArray')
    and it returns [Array[2]]

ただし、そのコントローラーをemberjs コンポーネントに渡すと、

      {{date-picker datePickerController=controller}}

コンポーネント内で、コントローラーの正しいインスタンスを取得できます、以下のコードを使用

 datePicker = _this.get('datePickerController');
 console.log(datePicker), shows the dateArray with its content.

しかし、以下のコードを使用して上記のインスタンスに基づいて配列を取得すると、配列は空として表示されます。

  controllerContent = datePicker.get('dateArray'); 

ただし、予定テンプレートのハンドル式にdateArrayを追加すると、そのコンテンツがレンダリングされます。

  {{dateArray}}

では、コントローラーインスタンスのemberjsコンポーネントdateArrayがあるのに、なぜemberjsコンポーネント内でdateArrayが空なのか

コントローラー:

App.AppointmentController = Ember.ObjectController.extend({
   needs: [ 'timeSlot'],
   timeSlotController: Ember.computed.alias('controllers.timeSlot'),
   dateArray: function(){
     _this = this;  

     fetchDates = [ ];

    var aa = _this.get('content'); 

    var yy = aa.get('timeSlots')

    yy.then(function(hh){
        nn = hh.map(function(item){ return moment.utc(item.get('startTime')).format("YYYY-MM-DD"); });

     pp =  fetchDates.pushObjects([nn]);

     return nn;
    });  

    return fetchDates;
  }.property('content.@each.timeSlots')


});

emberjs コンポーネント:

App.DatePickerComponent = Ember.Component.extend({
   datePickerController: null,

   didInsertElement: function() {
     this._super();
     _this = this;
     var datePicker;

     datePicker = _this.get('datePickerController');
    //console.log(datePicker);

     var controllerContent = datePicker.get('dateArray');    

    //returns nil
     alert(controllerContent); 

    });// closes didInsertElement

  }

 });
4

2 に答える 2

1

Ember では、コントローラーを渡すのは奇妙なことです。それはモデル上の単なるデコレーターです。モデルがコントローラーの下で変更された場合、コントローラーは完全に異なる可能性があります (おそらくそれはあなたの意図です)。dateArray をコンポーネントに渡してみてください。

于 2013-10-20T16:55:10.363 に答える