为ember模型

时间:2016-04-15 19:13:56

标签: ember.js ember-data

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

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

2 个答案:

答案 0 :(得分:0)

您可以执行此操作,但我强烈建议您使用currentUser.data.iduserId作为计算属性的依赖项!

答案 1 :(得分:0)

你绝对可以这样做,但是根据你在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
         )
    })
})