没有指定数据类型时如何设置Ember模型默认值?

时间:2018-06-18 13:48:15

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

如何将默认值添加到未指定数据类型的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

1 个答案:

答案 0 :(得分:2)

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

propertyNoType: 'default value'

如果您拨打的createRecord没有propertyNoType的值,则默认为'default value',但如果您在create4Record期间进行分配,新值将覆盖默认值。

重要的是要注意,如果propertyNoType将是一个对象/日期/数组,它们只是引用,而不像String / Number / Boolean,它们是可变的。要防止破坏全局状态,您需要将默认值包装在computed-property中:

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

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