我试图通过在我的服务中注入商店来从服务中偷看商店。 peekRecord
函数返回一个Class。访问商店返回的记录的最佳方法是什么?
由于peekRecord是同步的,我尝试过:
const hasPermission = this.get('store').peekRecord('system/permission','PlatformRead');
console.log(hasPermission.data);
是否有任何Ember特定方式来访问从商店返回的记录?
答案 0 :(得分:1)
使用Ember.Object
' get()
检索值和set()
方法来更新值。
hasPermission.get('someProperty');
hasPermission.set('someProperty', 'New value of someProperty');
其中someProperty
可以在模型上定义:
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
export default Model.extend({
someProperty: attr('string');
});
使用这些方法还可以确保重新计算计算属性(默认情况下,如果依赖值在此期间已更改)。我强烈建议您阅读Ember指南的这一部分:The Object model。
顺便说一下,当我从JSHint切换到ESLint并应用eslint-plugin-ember时,我使用了来自Ember namespace的get()
和set()
方法。
在这种情况下,您可以编写hasPermission.get('data')
而不是写Ember.get(hasPermission, 'data');
。在代码可读性方面更进一步,你可以这样做:
// your-app/services/your-service.js
// ... imports
const {
get,
inject,
Service,
} = Ember;
export default Service.extend({
store: inject.service(),
someFunction(){
const hasPermission = this.get('store').peekRecord('system/permission','PlatformRead');
console.log(get(hasPermission, 'someProperty'));
},
});
以下Stackoverflow thread略微触及this.get()
和Ember.get()
之间的差异。