javascript - 未指定数据类型时如何设置 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
解决方案
由于该属性仅是客户端而不是服务器端,因此根本不需要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' } })
,则传入的值将按预期覆盖计算属性。
推荐阅读
- php - 如何使用 PHP 通过 FTP 发送文件?
- google-cloud-functions - 读取、更新和删除的 Firestore 规则
- plasticscm - 塑料 scm 全球 client.conf 不工作
- android - 在曲面上旋转视图
- c++ - 在 Python 中访问 C++ 文件
- c# - 如何序列化 json 以显示属性值而不是属性名称?
- paypal - 如何测试自动化 PayPal SDK 按钮支付流程?
- sql - 从一个表格插入多个表格的过程
- python - 转换基于 Sklearn 的自定义度量函数 -> 用作 Keras 的回调度量
- r - 将列添加到列表中具有相同列名但值不同的多个数据框中