2017-02-12 3 views
1

Я написал службу уведомлений загрузки:Вычисляется собственности на сервис, который обращается в магазин

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

Я хочу изменить цвет значка на панели навигации, когда есть непрочитанные уведомления. Панель навигации является компонентом:

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

И шаблон затем использует hasUnreadNotifications свойство решить, следует использовать класс выделить:

<span class="icon"> 
    <i class="fa fa-bell {{if hasUnreadNotifications 'has-notifications'}}"></i> 
</span> 

Однако, это не работает. Хотя хранилище вызвано и уведомления возвращаются, hadUnreadNotifications не разрешает логическое. Я думаю, это потому, что он возвращает обещание, и шаблон не может с этим справиться, но я не уверен.

Вопросы

  • Это своеобразный уголек, чтобы обернуть магазин в службе, как это. Я делаю это, потому что неудобно загружать уведомления в маршрут приложения, чтобы показать счет.
  • Почему hasUnreadNotifications не возвращает логическое значение?
  • Возможно ли сделать объекты read и unread вместо функций, поэтому вычисленное свойство может быть создано в службе для вычисления счета?

ответ

2

Возврат обещаний от вычисленного имущества не будет работать. Вычислимые свойства не являются обещаниями. для его работы вам необходимо вернуть DS.PrmoiseObject или DS.PromiseArray.

Вы можете прочитать другие варианты, доступные из этого igniter article.

import Ember from 'ember'; 
import DS from 'ember-data'; 

export default Ember.Component.extend({ 
    notifications: Ember.inject.service(), 
    session: Ember.inject.service(), 

    hasUnreadNotifications: Ember.computed('notifications', function() { 
     return DS.PromiseObject.create({ 
      promise: this.get('notifications').unread().then((unread) => { 
       return unread.get('length') > 0; 
      }) 
     }); 
    }) 

}); 
Смежные вопросы