Я хочу внедрить текущего пользователя в мою модель topic и сделать некоторые проверки.

Примере:

export default DS.Model.extend({
    currentUser: Ember.inject.service('session-account'),
    text: DS.belongsTo('string'),
    userId:   DS.attr('number'),
    isMine: function(){
        return this.get('currentUser.data.id') == this.get('userId')
    }.property()
}

Вопрос: Это предпочтительный подход для реализации этой логики? Также меня интересует производительность этого подхода, внедрение службы в каждую строку может вызвать снижение производительности?

0
user1156168 15 Апр 2016 в 22:13

2 ответа

Лучший ответ

Вы определенно можете это сделать, но в зависимости от того, что у вас есть в currentUser.data, это может быть неоптимальным или не давать ожидаемого результата. Если currentUser.data является ProxyObject (DS.PromiseObject) или обещает, что это может привести к тому, что вычисленное свойство будет подсчитано больше раз, чем вы намереваетесь.
Более того, object.get ('x.y.z') может давать непредвиденные результаты, особенно если x или y являются обещаниями, будьте осторожны с цепочкой свойств в get

Если currentUser.data - DS.PromiseObject, вам лучше реализовать вычисленное свойство следующим образом:

export default DS.Model.extend({
    currentUser: Ember.inject.service('session-account'),
    text: DS.belongsTo('string'),
    userId:   DS.attr('number'),
    isMine: Ember.computed('currentUser.data.id', 'userId', function() {
         model = this;
         promise = new Ember.RSVP.Promise(function(resolve, reject){
             model.get('currentUser.data').then(function(currentUserData){
                resolve(currentUserData.get('id') === model.get('userId')) 
             }).catch(function(reason){
                reject(reason)
             })
         })

         return DS.PromiseObject.create(
             promise: promise
         )
    })
})
0
meszike123 17 Апр 2016 в 21:11

Вы можете это сделать, но я настоятельно рекомендую использовать currentUser.data.id и userId как зависимости вашего вычисляемого свойства!

0
Lux 16 Апр 2016 в 00:07