#4 创建、更新和删除
来源:互联网 发布:360域名举报 编辑:程序博客网 时间:2024/05/17 07:41
创建记录
你可以调用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: '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'); //=> falseperson.get('hasDirtyAttributes'); //=> falseperson.set('isAdmin', true);person.get('hasDirtyAttributes'); //=> trueperson.changedAttributes(); //=> { isAdmin: [false, true] }
基于这一点,你即可以保存更新后的记录,也可以回滚你的记录到原始状态。调用rollbackAttributes()来回滚所有的变化过的属性。如果某条记录isNew为真,那么这条记录将被从store中移除。
person.get('hasDirtyAttributes'); //=> trueperson.changedAttributes(); //=> { isAdmin: [false, true] }person.rollbackAttributes();person.get('hasDirtyAttributes'); //=> falseperson.get('isAdmin'); //=> falseperson.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});// ORstore.findRecord('post', 2, { backgroundReload: false }).then(function(post) { post.destroyRecord(); // => DELETE to /posts/2});
backgroundReload选项用来阻止对该数据的重新读取,因为findRecord()会自动的从适配器那里查找数据。
本节完
- #4 创建、更新和删除
- MongoDB初探-创建,更新和删除文档
- MongoDB的创建、更新和删除
- mongodb_创建、删除、更新
- mongodb_创建、删除、更新 .
- mongodb创建更新删除
- MongoDB创建,更新,删除
- mongodb创建、更新、删除
- 使用 ADO.NET 来创建、读取、更新和删除数据
- SQL(一)表的创建、更新和删除
- dom创建和解析及更新删除xml
- QtCreator 使用DOM创建和操作(添加,删除,更新)XML
- Unity3d XML的创建、更新、添加、删除和读取
- linux软链接的创建、删除和更新
- 创建级联更新,级联删除
- MangoDB创建、更新、删除文档
- mongoDb 文档创建、更新、删除
- Mongodb-创建、更新、删除相关
- 190. Reverse Bits
- 让你的windows 10更快更流畅!
- CyclicBarrier学习
- Nginx
- rabbitmq安装
- #4 创建、更新和删除
- 8848钛合金手机,揭秘你不知道的功能
- stm32 SD卡 SPI驱动以及fatfs移植
- 前端经典面试题---JS篇
- Android--监听网络变化
- TCP套接字编程
- 判断一个结点/一个树是否在一棵二叉树中
- 荼蘼
- Linux 如何添加一个 Swap 文件