ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 如何获取所有计算属性的列表?

2019-07-09 09:45:52  阅读:255  来源: 互联网

标签:javascript ember-js ember-data


使用ember数据,我在序列化过程中遇到了一个问题,其中计算属性不包含在有效负载中.

var Person = DS.Model.extend({
    firstName: DS.attr('string'),
    lastName:  DS.attr('string'),
    fullName:  function( ) {
            return this.firstName + this.lastName;
    }.property()
});

App.store.createRecord( Person, {
    firstName: 'John',
    lastName:  'Doe'
});
App.store.commit();

结果如下有效负载:

{ firstName: "John",
  lastName:  "Doe" }

我已经尝试将.cacheable()添加到属性中,但它似乎没有帮助.我也尝试在Ember.computed()中包装整个fullName函数,但这似乎也没有帮助.

跟踪Ember代码,我看到请求的数据来自DS.Model.serialize(),它收集模型的所有属性.但是,它似乎没有收集计算属性.

Ember Code代码段:

serialize: function(record, options) {
  options = options || {};

  var serialized = this.createSerializedForm(), id;

  if (options.includeId) {
    if (id = get(record, 'id')) {
      this._addId(serialized, record.constructor, id);
    }
  }

  this.addAttributes(serialized, record);
  this.addRelationships(serialized, record);

  return serialized;
},

addAttributes: function(data, record) {
  record.eachAttribute(function(name, attribute) {
    this._addAttribute(data, record, name, attribute.type);
  }, this);
}

如您所见,它们收集属性和关系,但似乎没有收集计算属性的任何内容.我的策略首先是重载addAttributes()以循环遍历所有计算属性并将它们添加到列表中.但在我的尝试中,无法找到获得计算属性列表的可靠方法.如果我使属性可缓存,我可以使用Ember.meta(模型,’缓存’)但该列表包括所有属性,计算属性和一些我不需要/想要的额外内容.

那么,毕竟我的问题……

> Ember中是否存在导致计算属性包含在序列化中的方法?
>如果没有,我可以重载适当的方法,但是如何获得所有计算属性的动态列表? (我可以使用.getProperties(),但它需要一个属性名称数组,我没有)
>还有其他相关建议吗?

解决方法:

我没有尝试过,但eachComputedProperty是否适合您的目的?

标签:javascript,ember-js,ember-data
来源: https://codeday.me/bug/20190709/1411662.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有