在服务中访问商店数据Ember js

时间:2017-09-27 05:39:21

标签: ember.js ember-data

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

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

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

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

1 个答案:

答案 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 namespaceget()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()之间的差异。