向 ember 模型注入额外数据

Inject additional data to ember model

我想将当前用户注入我的 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()
}

问题: 执行此逻辑是否是更好的方法?另外我对这种方法的性能很感兴趣,向每一行注入服务可能会导致性能下降?

你可以这样做,但我强烈建议使用 currentUser.data.iduserId 作为你计算的 属性!

的依赖项

您当然可以做到这一点,但是根据您在 currentUser.data 中的内容,它可能不是最佳的,或者不会产生预期的结果。如果 currentUser.data 是 ProxyObject (DS.PromiseObject) 或承诺它会导致计算出的 属性 被计算得比您预期的要多。
此外 object.get('x.y.z') 可能会产生意想不到的结果,尤其是当 x 或 y 是 promise 时,请小心 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
         )
    })
})