在服务 Ember js 中访问存储数据

Accessing Store data in service Ember js

我试图通过在我的服务中注入商店来从服务中查看商店。 peekRecord函数returns一个Class。访问商店 returns 的记录的最佳方式是什么?

由于 peekRecord 是同步的,我试过:

const hasPermission = this.get('store').peekRecord('system/permission','PlatformRead');
console.log(hasPermission.data);

是否有任何Ember特定方法来访问从商店返回的记录?

使用 Ember.Objectget() 检索值并使用 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, I use get() and set() methods from Ember namespace 时。 在这种情况下,您应该写 Ember.get(hasPermission, 'data'); 而不是 hasPermission.get('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'));
   },
});

下面的 Whosebug 稍微触及了 this.get()Ember.get() 之间的区别。