2017-09-27 5 views
1

J'essaie de jeter un coup d'œil sur un magasin du service, en injectant le magasin dans mon service. La fonction peekRecord renvoie une classe. Quel est le meilleur moyen d'accéder au dossier que le magasin retourne?Accès aux données du magasin dans le service Ember js

Comme peekRecord est synchrone j'ai essayé comme:

const hasPermission = this.get('store').peekRecord('system/permission','PlatformRead'); 
console.log(hasPermission.data); 

est-il un moyen spécifique Ember pour accéder au dossier qui est retourné dans le magasin?

Répondre

1

Utilisez la méthode pour récupérer la valeur et la méthode set() pour mettre à jour la valeur.

hasPermission.get('someProperty'); 
hasPermission.set('someProperty', 'New value of someProperty'); 

someProperty pourrait définir sur le modèle:

import Model from 'ember-data/model'; 
import attr from 'ember-data/attr'; 

export default Model.extend({ 
    someProperty: attr('string'); 
}); 

L'utilisation de ces méthodes seront également des propriétés calculées sont recalculées sûr (par défaut, si les valeurs ont changé en fonction dans l'intervalle). Je vous recommande fortement de lire cette section des guides Ember: The Object model.

BTW, personnellement, comme je l'ai passé à ESLint de JSHint et appliqué eslint-plugin-ember, j'utilise get() et set() méthodes de Ember namespace. Dans un tel cas, au lieu d'écrire hasPermission.get('data'), vous écrivez Ember.get(hasPermission, 'data');. Apporter encore plus loin en matière de lisibilité coder, vous pouvez faire qqch comme ceci:

// your-app/services/your-service.js 
// ... imports 

const { 
    get, 
    inject, 
    Service, 
} = Ember; 

export default Service.extend({ 
    store: inject.service(), 

    someFunction(){ 
     const hasPermission = this.get('store').peekRecord('system/permission','PlatformRead'); 
     console.log(get(hasPermission, 'someProperty')); 
    }, 
}); 

Ce qui suit Stackoverflow thread touche légèrement la différence entre this.get() et Ember.get().