javascript - 未指定数据类型时如何设置Ember模型默认值?

标签 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

最佳答案

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

propertyNoType: 'default value'

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

需要注意的是,如果 propertyNoType将是一个对象/日期/数组,它们只是引用,与字符串/数字/ bool 值不同,它们是可变的。为了防止破坏全局状态,您需要将默认值包装在计算属性中:

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

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

关于javascript - 未指定数据类型时如何设置Ember模型默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50910998/

相关文章:

javascript - 在 Ember 中关联两组 JSON 数据

javascript - Ember Data 的商店 promise 在五次测试中不起作用

javascript - Ember-Data: "mappings"是如何工作的

ember.js - 使用 Ember.js Data RESTAdapter 时应如何处理错误?

javascript - HTML DOM 和 jQuery DOM 在一行简单的代码中?

javascript - TypeScript 中的 EventTarget 类型不存在属性 'value'

javascript - 将 php 数组转换为 javascript 数组

javascript - 在 Javascript 中接受 2 个输入值

javascript - 使用 ember-data 从 api 路由事件获取我的所有事件

ember.js - Ember 链接到立即设置事件类