2017-08-25 1 views
0

Je rencontre des problèmes avec une propriété calculée dans Ember.Impossible d'obtenir la valeur du tableau à l'intérieur de la propriété calculée

L'élément problématique est timeZones, qui est défini comme suit:

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); 
    } 
}); 

J'ai quelque chose appelé selectedTimeZone qui ressemble à ceci:

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; 
    }), 

Le problème est que this.get('timeZones') est pas vraiment accessible à l'intérieur du composant. timeZones fait très bien le modèle. Je remplis une liste déroulante avec timeZones dès maintenant. Mais quand je l'ai, ça passe comme Class.

Comment puis-je mettre la main sur timeZones à l'intérieur de cette propriété calculée?

Répondre

0

en fait la plupart de ceci semble bon, cependant du code manque. Comme est-ce un composant ou le contrôleur, et si c'est un composant, comment le composant est-il appelé?

Cependant, un problème est évident. timeZone est évidemment un enregistrement ember-data, et donc l'accès timeZone.name n'est pas une bonne idée. Vous devez utiliser les braises .get(), timeZone.get('name') ou Ember.get(timeZone, 'name').

Ensuite, votre clé de dépendance est erronée. Parce que vous utilisez le name de chaque timeZone vous devez remplacer la clé de dépendance timeZone avec [email protected].

Enfin un peu une version plus petite de votre PC à l'aide findBy:

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

Si cela ne fonctionne pas vous devez vérifier que les données sont correctement chargées dans le magasin avec l'inspecteur de Ember et vérifiez que vous passez le timeZones dans le composant avec timeZones=model.timeZones lorsque vous appelez le composant à partir de votre contrôleur.