未指定数据类型时如何设置 Ember 模型默认值?
How to set Ember model default value when no data type specified?
如何向未指定数据类型的 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
因为 属性 只是客户端而不是服务器端,所以根本不需要 attr
。相反,propertyNoType
可以是普通的 属性,就像在典型的 EmberObject 中一样。
propertyNoType: 'default value'
如果您调用 createRecord
时没有为 propertyNoType
赋值,那么它将默认为 'default value'
但如果您在 create4Record
期间分配它,新值将覆盖默认。
重要的是要注意,如果 propertyNoType
将是一个 Object/Date/Array,它们只是引用,与 String/Number/Boolean 不同,它们是 可变的 .为了防止破坏全局状态,您需要将默认值包装在 computed-属性:
propertyNoType: computed(function() {
return {
foo: 'default value'
};
})
这将在每次计算计算时创建 Object/Array 的 new 实例。在这种情况下,它没有依赖性,因此永远不会变脏,只计算一次并从那一点开始缓存。如果您调用 createRecord('my-model', { propertyNoType: { foo: 'bar' } })
,则传入的值将按预期覆盖计算的 属性。
如何向未指定数据类型的 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
因为 属性 只是客户端而不是服务器端,所以根本不需要 attr
。相反,propertyNoType
可以是普通的 属性,就像在典型的 EmberObject 中一样。
propertyNoType: 'default value'
如果您调用 createRecord
时没有为 propertyNoType
赋值,那么它将默认为 'default value'
但如果您在 create4Record
期间分配它,新值将覆盖默认。
重要的是要注意,如果 propertyNoType
将是一个 Object/Date/Array,它们只是引用,与 String/Number/Boolean 不同,它们是 可变的 .为了防止破坏全局状态,您需要将默认值包装在 computed-属性:
propertyNoType: computed(function() {
return {
foo: 'default value'
};
})
这将在每次计算计算时创建 Object/Array 的 new 实例。在这种情况下,它没有依赖性,因此永远不会变脏,只计算一次并从那一点开始缓存。如果您调用 createRecord('my-model', { propertyNoType: { foo: 'bar' } })
,则传入的值将按预期覆盖计算的 属性。