2017-08-25 9 views
0

Emberで計算されたプロパティに問題があります。計算されたプロパティ内で配列の値を取得できません

問題のある項目は次のように設定されているtimeZones、次のとおりです。

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model(params) { 
    return Ember.RSVP.hash({ 
     account: this.store.findRecord('account', params.id), 
     timeZones: this.store.findAll('time-zone'), <------------ timeZones 
     users: this.store.query('user', { by_account_id: params.id }) 
    }); 
    }, 

    setupController(controller, model) { 
    this._super(controller, model.account); 
    controller.set('users', model.users); 
    controller.set('timeZones', model.timeZones); 
    } 
}); 

その後、私はこのようになりますselectedTimeZoneと呼ばれるものがあります。

selectedTimeZone: Ember.computed('location.timezone', 'timeZones', function() { 
    console.log(this.get('timeZones')); 

    const timeZoneName = this.get('location.timezone'); 
    var result; 

    this.get('timeZones').forEach(function(timeZone) { 
     if (timeZone.name === timeZoneName) { 
     console.log('yes'); // <------------------- never gets here 
     result = timeZone; 
     } 
    }); 

    return result; 
    }), 

を問題はthis.get('timeZones')が実際にはないということですコンポーネントの内部でアクセス可能です。 timeZonesはそれをちょうど良いテンプレートにします。私は今すぐtimeZonesでドロップダウンリストに値を設定しています。しかし、私がconsole.logとなったときには、それはちょうどClassとなります。

timeZones私はこの計算されたプロパティ内で私の手を得ることができますか?

答えて

0

実際にはほとんどがこのように見えますが、コードがありません。これはコンポーネントやコントローラのようなもので、コンポーネントの場合はコンポーネントの呼び出し方法は?

しかし、1つの問題は明らかです。 timeZoneは明らかにember-dataレコードなので、timeZone.nameにアクセスすることはお勧めできません。あなたはtimeZone.get('name')またはEmber.get(timeZone, 'name')のいずれかの小文字.get()を使用する必要があります。あなたの依存関係のキー次

は間違っています。あなたは、各timeZonenameを使用しているので、あなたは[email protected]timeZoneキー依存関係を置き換える必要があります。

findByを使用して、CPの最後に少し小さいバージョン:

selectedTimeZone: Ember.computed('location.timezone', '[email protected]', function() { 
    const timeZoneName = this.get('location.timezone'); 
    return this.get('timeZones').findBy('name', timeZoneName); 
}), 

これはあなたは、データが燃えさしインスペクタを使用してストアに正常にロードされていることを確認していることを、あなたを確認する必要がありに動作しない場合コントローラーからコンポーネントを呼び出すときにはをtimeZones=model.timeZonesのコンポーネントに渡します。

関連する問題