2017-09-27 39 views
1

我想通过在我的服务中注入商店来从服务中窥探商店。 peekRecord函数返回一个Class。访问商店返回记录的最佳方式是什么?在服务中访问存储数据Ember js

由于peekRecord是同步我尝试这样的:

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

是否有访问从商店返回的记录的任何灰烬具体方式是什么?

回答

1

使用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,我使用从灰烬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')); 
    }, 
}); 

以下#1 thread触摸略有this.get()Ember.get()之间的差异。