如何将默认值添加到未指定数据类型的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
答案 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' } })
,则传入的值将按预期覆盖计算属性。