#4 创建、更新和删除
2017-07-28 13:55
260 查看
创建记录
你可以调用store的createRecord()方法创建一条记录:store.createRecord('post', { title: 'Rails is Omakase', body: 'Lorem ipsum' });
在controller和route中可以通过this.get(‘store’)来获得store对象。
更新记录
更新一条记录,实际上是更新记录中属性的值:this.get('store').findRecord('person', 1).then(function(tyrion) { // ...after the record has loaded tyrion.set('firstName', "Yollo"); });
Ember提供了很多的可以编辑记录的方法。比如,你可以使用Ember.object的incrementProperty方法:
person.incrementProperty('age'); // Happy birthday!
记录持久化
Ember Data对记录的持久化是基于对象实例。对每个模型实例调用save( ),都会发起一个网络请求。Ember Data会精心的为你跟踪每条记录的状态。这使得Ember Data在保存记录时,对待新创建的记录方式会与已存在的记录不同。
默认的,Ember Data会在保存新创建的记录的时候发起一个post请求。
let post = store.createRecord('post', { title< 4000 /span>: 'Rails is Omakase', body: 'Lorem ipsum' }); post.save(); // => POST to '/posts'
对于以存在的记录,Ember Data会通过HTTP PATCH的方式来更新它:
store.findRecord('post', 1).then(function(post) { post.get('title'); // => "Rails is Omakase" post.set('title', 'A new post'); post.save(); // => PATCH to '/posts/1' });
你可以通过检查其hasDirtyAttributes属性来判断一个记录是否有未被保存的更改. 你也可以通过changedAttributes( )对比一条记录中哪些属性被更改了以及它的原始值是什么。changedAttributes返回一个对象,这个对象key是发生变化的属性的名称,value是一个数组,它包括属性的原始值和更改后的值。
person.get('isAdmin'); //=> false person.get('hasDirtyAttributes'); //=> false person.set('isAdmin', true); person.get('hasDirtyAttributes'); //=> true person.changedAttributes(); //=> { isAdmin: [false, true] }
基于这一点,你即可以保存更新后的记录,也可以回滚你的记录到原始状态。调用rollbackAttributes()来回滚所有的变化过的属性。如果某条记录isNew为真,那么这条记录将被从store中移除。
person.get('hasDirtyAttributes'); //=> true person.changedAttributes(); //=> { isAdmin: [false, true] } person.rollbackAttributes(); person.get('hasDirtyAttributes'); //=> false person.get('isAdmin'); //=> false person.changedAttributes(); //=> {}
处理验证错误
如果当保存记录动作发生后,服务端传来了验证错误的信息,那么这个信息将会被收纳进模型的errors属性上。以下例子展示了如何使用该属性:{{#each post.errors.title as |error|}} <div class="error">{{error.message}}</div> {{/each}} {{#each post.errors.body as |error|}} <div class="error">{{error.message}}</div> {{/each}}
Promises
save( )返回一个promise对象,通过promise可以容易处理成功和失败的响应。下面是一个普通呃场景:let post = store.createRecord('post', { title: 'Rails is Omakase', body: 'Lorem ipsum' });
let self = this;
function transitionToPost(post) {
self.transitionToRoute('posts.show', post);
}
function failure(reason) {
// handle the error
}
post.save().then(transitionToPost).catch(failure);
// => POST to '/posts'
// => transitioning to posts.show route
删除记录
删除记录跟创建记录一样简单。在DS.Model的实例上调用deleteRecord()即可。isDeleted是判断是否删除的标识。删除后的状态可用save( )进行持久化。或者你可以直接使用destroyRecord( )方法来一次性执行完删除和持久化的过程。store.findRecord('post', 1, { backgroundReload: false }).then(function(post) { post.deleteRecord(); post.get('isDeleted'); // => true post.save(); // => DELETE to /posts/1 }); // OR store.findRecord('post', 2, { backgroundReload: false }).then(function(post) { post.destroyRecord(); // => DELETE to /posts/2 });
backgroundReload选项用来阻止对该数据的重新读取,因为findRecord()会自动的从适配器那里查找数据。
本节完
相关文章推荐
- MongoDB创建、更新和删除等指令
- 使用XmlDocument创建XML文档及增加删除更新节点
- 3.MangoDB创建、更新、删除文档
- Mysql必知必会(笔记)【插入数据,更新和删除数据,创建和操纵表,视图】
- 对象表+创建对象表+插入操作+查询操作+更新与删除操作
- 【MongoDB学习笔记5】MongoDB中的创建、读取、更新、删除(CRUD)
- python的【字典dict】:创建、访问、更新、删除;查看键、值、键值对;遍历;排序
- 用Java对xml文档进行遍历,更新,创建,删除
- Lucene3.5 的索引的创建,删除,更新,加权
- 使用Ext中的Grid,Form,Dialog来实现列表,创建,更新,删除,查找和分页功能
- MongoDB创建,更新,删除
- SQL学习笔记5 组合查询 插入/更新/删除数据 创建和操纵表
- SQL(一)表的创建、更新和删除
- asp.net之DataList的使用方法,及分页(存储过程创建),编辑,更新,删除
- MongoDB学习笔记-创建、更新、删除文档
- android sqlite 创建数据库,表、增加数据、更新数据、删除数据
- Oracle数据库的概念(权限、角色)以及各种操作(创建表空间、创建表、查询、更新、删除、插入)和常用函数
- python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
- Python编程之列表操作实例详解【创建、使用、更新、删除】
- [转载]MongoDB学习 (四):创建、读取、更新、删除(CRUD)快速入门