【问题标题】:Accessing Store data in service Ember js在服务 Ember js 中访问存储数据
【发布时间】:2018-03-08 11:45:45
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ember.js ember-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 时,我使用来自 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() 之间的区别。

    【讨论】:

      猜你喜欢
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      • 2018-12-13
      相关资源
      最近更新 更多