向 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.id
和 userId
作为你计算的 属性!
的依赖项
您当然可以做到这一点,但是根据您在 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
)
})
})
我想将当前用户注入我的 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.id
和 userId
作为你计算的 属性!
您当然可以做到这一点,但是根据您在 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
)
})
})