【问题标题】:How to set Ember model default value when no data type specified?未指定数据类型时如何设置 Ember 模型默认值?
【发布时间】:2018-11-27 09:21:38
【问题描述】:

如何向未指定数据类型的 Ember 模型添加默认值。

import DS from 'ember-data'

export default DS.Model.extend({

  // with data type specified
  propertyString: DS.attr('string'),
  propertyWithDefault: DS.attr('number', {default: 0}),
  propertyWithFunctionDfault: DS.attr('date', {
      defaultValue() { return new Date() }
  }),

  // How to set default when no type defined
  propertyNoType: DS.attr(),
  propertyNoTypeWithDefault: DS.attr(null, {default: 0}) // does not work

})

https://guides.emberjs.com/release/models/defining-models/#toc_options

【问题讨论】:

    标签: javascript ember.js ember-data default default-value


    【解决方案1】:

    由于该属性仅是客户端而不是服务器端,因此根本不需要attr。相反,propertyNoType 可以是一个普通属性,就像它在典型的 EmberObject 中一样。

    propertyNoType: 'default value'
    

    如果您在没有 propertyNoType 值的情况下调用 createRecord,那么它将默认为 'default value',但如果您在 create4Record 期间分配它,则新值将覆盖默认值。

    需要注意的是,如果propertyNoType 将是一个对象/日期/数组,那么它们只是引用,并且与字符串/数字/布尔值不同,它们是可变的。为了防止破坏全局状态,您需要将默认值包装在计算属性中:

    propertyNoType: computed(function() {
      return {
        foo: 'default value'
      };
    })
    

    这将在每次计算计算时创建对象/数组的实例。在这种情况下,它没有依赖关系,因此永远不会脏,只计算一次并从该点开始缓存。如果您调用createRecord('my-model', { propertyNoType: { foo: 'bar' } }),则传入的值将按预期覆盖计算属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-06
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多