首页 > 解决方案 > 未指定数据类型时如何设置 Ember 模型默认值?

问题描述

如何向未指定数据类型的 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

标签: javascriptember.jsember-datadefaultdefault-value

解决方案


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

propertyNoType: 'default value'

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

重要的是要注意 ifpropertyNoType将是一个 Object/Date/Array ,它们只是引用,与 String/Number/Boolean 不同,它们是mutable。为了防止破坏全局状态,您需要将默认值包装在计算属性中:

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

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


推荐阅读