写点什么

Ember Data 之记录操作:创建、更新和删除

用户头像
devpoint
关注
发布于: 刚刚
Ember Data 之记录操作:创建、更新和删除

前面在《Ember.js 项目开发之 Ember Data》介绍了 Ember Data 和 《Ember Data 之模型定义》,《Ember Data 之记录查询》,本文将介绍记录操作:创建、更新和删除。

创建记录

可以通过调用 Store 中的createRecord() 方法来创建记录 。


store.createRecord('post', {  title: 'Rails is Omakase',  body: 'Lorem ipsum'});
复制代码


可以在控制器和路由中使用store对象this.store

更新记录

更改 Ember Data 记录就像设置要更改的属性一样简单:


this.store.findRecord('person', 1).then(function(tyrion) {  // ...after the record has loaded  tyrion.firstName = 'Yollo';});
复制代码

持续记录

Ember Data 中的记录将按实例持久保存,调用 save() 的任何实例,Model 将发出网络请求。


Ember Data 会为跟踪每个记录的状态,保存时,这使 Ember Data 可以将新创建的记录与现有记录区别对待。


默认情况下,Ember DataPOST 新创建的记录添加到其类型 URL。


let post = store.createRecord('post', {  title: 'Rails is Omakase',  body: 'Lorem ipsum'});
post.save(); // => POST to '/posts'
复制代码


后端已存在的记录使用 HTTP PATCH动词更新。


store.findRecord('post', 1).then(function(post) {  post.title; // => "Rails is Omakase"  post.title = 'A new post';  post.save(); // => PATCH to '/posts/1'});
复制代码


可以通过检查记录的hasDirtyAttributes属性来判断记录是否有尚未保存的未完成的更改。还可以使用changedAttributes()方法查看记录的哪些部分被更改了,以及原始值是什么。changedAttributes返回一个对象,该对象的键是已更改的属性,值是一个值数组[oldValue, newValue]


person.isAdmin; // => falseperson.hasDirtyAttributes; // => falseperson.isAdmin = true;person.hasDirtyAttributes; // => trueperson.changedAttributes(); // => { isAdmin: [false, true] }
复制代码


此时,可以通过保留更改,save()也可以回滚更改。调用 rollbackAttributes() 保存的记录将全部恢复changedAttributes为原始值。如果有记录isNew,它将从Store中删除。


person.hasDirtyAttributes; // => trueperson.changedAttributes(); // => { isAdmin: [false, true] }
person.rollbackAttributes();
person.hasDirtyAttributes; // => falseperson.isAdmin; // => falseperson.changedAttributes(); // => {}
复制代码

处理 Validation 错误

如果后端服务器在尝试保存后返回验证错误,则这些错误将在errors模型的属性上可用。这是在博客模板中保存博客帖子时可能显示的错误的方式:


{{#each this.post.errors.title as |error|}}  <div class="error">{{error.message}}</div>{{/each}}{{#each this.post.errors.body as |error|}}  <div class="error">{{error.message}}</div>{{/each}}
复制代码

Promises

save()返回一个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
复制代码

删除记录

删除记录与创建记录一样简单。在模型的任何实例上调用deleteRecord(),将记录标记为已删除。然后可以使用save()持久化删除。或者,可以使用destroyRecord方法同时删除和持久化。


let post = store.peekRecord('post', 1);  post.deleteRecord();  post.isDeleted; // => true  post.save(); // => DELETE to /posts/1});
// OR post = store.peekRecord('post', 2); post.destroyRecord(); // => DELETE to /posts/2});
复制代码


发布于: 刚刚阅读数: 2
用户头像

devpoint

关注

细节的追求者 2011.11.12 加入

专注前端开发,用技术创造价值!

评论

发布
暂无评论
Ember Data 之记录操作:创建、更新和删除