#2 定义模型
2017-07-27 14:35
351 查看
英文原版:https://guides.emberjs.com/v2.14.0/models/defining-models/
模型,是一个定义了交互数据中的属性和行为的一个类,并且通过模型来向用户展示内容。任何用户希望看到的内容都应该用model来代表。
当你需要创建一个新的模型时,你需要在models文件夹下面创建一个新的文件,并且这个新的模型要从DS.Model类继承。用Ember CLI命令来创建模型可以为你省不少时间。下面我们来创建一个person模型:
将会生成person.js:
待你创建了模型类后,你就可以开始查询指定类型的记录了。
模型中的属性将会在从服务端返回的数据转换为记录时和序列化一条记录保存到服务器时被使用。
你可以像使用其他属性那样来使用模型中的属性,包括使用计算属性。经常的,你会需要定义计算属性来做一些基于模型中其他属性的属性。
更多关于计算属性的内容,请查阅:计算属性
date 转换器,将会把一个 ISO 8601标准的日期字符串转换为javascript date对象。
boolean转换器,除了布尔值true和false之外,它还能处理其他类型的值。字符串”true”或”t”或者其他任何字符串以及”1”或者数字都会被转换为true。
转换器不是必须使用的。如果你不指定转换器,那么Ember data不会对值做其他操作(默认:string)。
下面是一个简单的转换器,它将数值在美分和美元之间做转换:
转换器带有2个方法:serialize和deserialize。反序列化将值转换为客户端需要的形式。序列化将值还原成原始的形式。
你可以这么使用你的自定义转换器:
下面的例子我们定义了一个verified属性,它的默认值是false, createdAt的默认值时当前的日期时间。
本节完
模型,是一个定义了交互数据中的属性和行为的一个类,并且通过模型来向用户展示内容。任何用户希望看到的内容都应该用model来代表。
当你需要创建一个新的模型时,你需要在models文件夹下面创建一个新的文件,并且这个新的模型要从DS.Model类继承。用Ember CLI命令来创建模型可以为你省不少时间。下面我们来创建一个person模型:
ember generate model person
将会生成person.js:
app/models/person.js import DS from 'ember-data'; export default DS.Model.extend({ });
待你创建了模型类后,你就可以开始查询指定类型的记录了。
定义属性
上面定义的person模型还没有包含任何属性。现在我们给它添加firstName、lastName和birthday属性:app/models/person.js import DS from 'ember-data'; export default DS.Model.extend({ firstName: DS.attr(), lastName: DS.attr(), birthday: DS.attr() });
模型中的属性将会在从服务端返回的数据转换为记录时和序列化一条记录保存到服务器时被使用。
你可以像使用其他属性那样来使用模型中的属性,包括使用计算属性。经常的,你会需要定义计算属性来做一些基于模型中其他属性的属性。
app/models/person.js import DS from 'ember-data'; export default DS.Model.extend({ firstName: DS.attr(), lastName: DS.attr(), fullName: Ember.computed('firstName', 'lastName', function() { return `${this.get('firstName')} ${this.get('lastName')}`; }) });
更多关于计算属性的内容,请查阅:计算属性
转换器
在前后台交互过程中,有可能服务端返回的数据的数据类型跟你在javascript代码中所使用的类型不一致。Ember Data允许你定义简单的序列化和反序列化方法来对这些属性的类型做转换。你可以指定你想要的数据类型做为第一个参数给DS.attr( )方法。Ember Data提供了一些类型:string,number,boolean和date。app/models/person.js import DS from 'ember-data'; export default DS.Model.extend({ name: DS.attr('string'), age: DS.attr('number'), admin: DS.attr('boolean'), birthday: DS.attr('date') });
date 转换器,将会把一个 ISO 8601标准的日期字符串转换为javascript date对象。
boolean转换器,除了布尔值true和false之外,它还能处理其他类型的值。字符串”true”或”t”或者其他任何字符串以及”1”或者数字都会被转换为true。
转换器不是必须使用的。如果你不指定转换器,那么Ember data不会对值做其他操作(默认:string)。
自定义转换器
你也可以创建一个自定义转换器:ember generate transform dollars
下面是一个简单的转换器,它将数值在美分和美元之间做转换:
app/transforms/dollars.js import DS from 'ember-data'; export default DS.Transform.extend({ deserialize: function(serialized) { return serialized / 100; // returns dollars }, serialize: function(deserialized) { return deserialized * 100; // returns cents } });
转换器带有2个方法:serialize和deserialize。反序列化将值转换为客户端需要的形式。序列化将值还原成原始的形式。
你可以这么使用你的自定义转换器:
app/models/product.js import DS from 'ember-data'; export default DS.Model.extend({ spent: DS.attr('dollars') });
设置项(Options)
DS.attr( ) 也可以带有第二个参数,形式为{ }对象。目前设置项只有defaultValue可用,可以用它来设置模型中该属性的默认值。可以直接使用一个值,也可以通过函数来设置默认值。下面的例子我们定义了一个verified属性,它的默认值是false, createdAt的默认值时当前的日期时间。
app/models/user.js import DS from 'ember-data'; export default DS.Model.extend({ username: DS.attr('string'), email: DS.attr('string'), verified: DS.attr('boolean', { defaultValue: false }), createdAt: DS.attr('date', { defaultValue() { return new Date(); } }) });
本节完
相关文章推荐
- 每天的学习经验:SharePoint 2013 定义自己添加的产品清单。Callout菜单项、文档关注、SharePoint服务机端对象模型查询
- Entity Framework 6 Recipes 2nd Edition(11-4)译 -> 在”模型定义”函数里调用另一个”模型定义”函数
- V-rep学习笔记:机器人模型创建4—定义模型
- 从一个工作流流转中人员设定的例子看WBISF流程引擎所定义的用户授权安全模型
- tensorflow中保存模型、加载模型做预测(不需要再定义网络结构)
- c++模板之声明定义分离编译模型
- 修正表单相当中的必填检测并非在后台模型定义的检测方
- Ember.js 入门指南——定义模型
- [转载]MVC之父对“模型-视图-控制器”的最初定义
- 第二讲 DICOM信息模型和信息定义
- Xcode8.x使用CoreData模型出现类被非法重定义的解决办法
- 高人的文章:关于loose.dtd和xhtml1-transitional.dtd等文档类型定义模型中CSS失效的解决办法。
- Xcode8.x使用CoreData模型出现类被非法重定义的解决办法
- 【Thinkphp教程】模型定义
- 总结 (1) C++异常模型用try-catch语法定义,而SEH异常模型则用try-except语法;
- 定义你的数据模型
- ADO.NET Entity Framework如何:定义具有修改存储过程的模型(实体框架)
- 定义数组为有序数组模型,并利用二分法进行查找,删除特定值(缺点:只能删除一个值,若有相同的值,则删除第一个)
- ADO.NET Entity Framework 如何:使用存储过程定义模型(实体框架)
- DSM领域定义建模和MDA模型驱动架构分析