j'ai écrit un service pour les notifications de chargement:propriété calculée sur un service qui accède au magasin
import Ember from 'ember';
export default Ember.Service.extend({
sessionUser: Ember.inject.service(),
store: Ember.inject.service(),
read() {
let currentUserId = this.get('sessionUser.user.id');
return this.get('store').query('notification', {
userId: currentUserId,
read: true
});
},
unread() {
let currentUserId = this.get('sessionUser.user.id');
return this.get('store').query('notification', {
userId: currentUserId,
read: false
});
}
});
Je veux changer la couleur d'une icône dans la barre de navigation quand il y a des notifications non lues. La barre de navigation est un composant:
import Ember from 'ember';
export default Ember.Component.extend({
notifications: Ember.inject.service(),
session: Ember.inject.service(),
hasUnreadNotifications: Ember.computed('notifications', function() {
return this.get('notifications').unread().then((unread) => {
return unread.get('length') > 0;
});
})
});
Et le modèle utilise alors la hasUnreadNotifications
propriété de décider si la classe de mise en surbrillance doit être utilisé:
<span class="icon">
<i class="fa fa-bell {{if hasUnreadNotifications 'has-notifications'}}"></i>
</span>
Toutefois, il ne fonctionne pas. Bien que le magasin soit appelé et que les notifications soient renvoyées, le hadUnreadNotifications
ne se résout pas à un booléen. Je pense que c'est parce que cela renvoie une promesse et le modèle ne peut pas faire face à cela, mais je ne suis pas sûr.
Questions
- est-il Ember idiosyncrasique pour envelopper le magasin dans un service comme celui-ci. Je fais ceci parce que c'est gênant de charger les notifications dans la route d'application juste pour montrer le compte.
- Pourquoi
hasUnreadNotifications
ne renvoie-t-il pas un booléen? - Est-il possible de créer des propriétés
read
etunread
au lieu de fonctions, de sorte qu'une propriété calculée peut être créée dans le service pour calculer le nombre?