一、概述

1. 在Ember Data上以每个实例为基础,records被持久化。在DS.Model的任何一个实例上调用save()并且它将产生一个网络请求。

2. 下面是一些例子:

var post = store.createRecord('post', {
title: 'Rails is Omakase',
body: 'Lorem ipsum'
}); post.save(); // => POST to '/posts'
store.findRecord('post', 1).then(function(post) {
post.get('title'); // => "Rails is Omakase" post.set('title', 'A new post'); post.save(); // => PUT to '/posts/1'
});

二、Promises

1. save()返回一个promise,所以它是非常容易处理成功和失败的情况的。这里是一个普遍的模式:

var post = store.createRecord('post', {
title: 'Rails is Omakase',
body: 'Lorem ipsum'
}); var 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

2. promises甚至使处理失败的网络请求变得容易:

var post = store.createRecord('post', {
title: 'Rails is Omakase',
body: 'Lorem ipsum'
}); var self = this; var onSuccess = function(post) {
self.transitionToRoute('posts.show', post);
}; var onFail = function(post) {
// deal with the failure here
}; post.save().then(onSuccess, onFail); // => POST to '/posts'
// => transitioning to posts.show route

3. 在这里 here你可以学到更多关于promises,但是这里是另外一个关于展示如何重试持久化的例子:

function retry(callback, nTimes) {
// if the promise fails
return callback().catch(function(reason) {
// if we haven't hit the retry limit
if (nTimes > 0) {
// retry again with the result of calling the retry callback
// and the new retry limit
return retry(callback, nTimes - 1);
} // otherwise, if we hit the retry limit, rethrow the error
throw reason;
});
} // try to save the post up to 5 times
retry(function() {
return post.save();
}, 5);

7.5 Models -- Persisting Records的更多相关文章

  1. 7.6 Models -- Finding Records

    Ember Data的store为检索一个类型的records提供一个接口. 一.Retrieving a single record(检索单记录) 1. 通过type和ID使用store.findR ...

  2. 7.4 Models -- Pushing Records into the Store

    一.概述 1. store是作为一个所有records的缓存,这些records已经被你的应用程序加载.在你的app中如果你的路由或者一个controller请求一条record,如果它在缓存中这个s ...

  3. Ember.js学习教程 -- 目录

    写在前面的话: 公司的新项目需要用到Ember.js,版本为v1.13.0.由于网上关于Ember的资料非常少,所以只有硬着头皮看官网的Guides,为了加深印象和方便以后查阅就用自己拙劣的英语水平把 ...

  4. Orchard入门:如何创建一个完整Module

    这是一个Orchard-Modules的入门教程.在这个教程里,我们将开发两个功能页面分别用于数据录入与数据展示. 完成上述简单功能开发,我们一共需要6个步骤.分别为: 创建Module 创建Mode ...

  5. Learning storm book 笔记8-Log Processing With Storm

    有代码的书籍看起来就是爽,看完顺便跑个demo,感觉很爽! 场景分析 主要是利用apache的访问日志来进行分析统计 如用户的IP来源,来自哪个国家或地区,用户使用的Os,浏览器等信息,以及像搜索的热 ...

  6. 【原创】Odoo开发文档学习之:ORM API接口(ORM API)(边Google翻译边学习)

    官方ORM API开发文档:https://www.odoo.com/documentation/10.0/reference/orm.html Recordsets(记录集) New in vers ...

  7. 7.3 Models -- Creating And Deleting Records

    一.Creating 1. 你可以通过调用在store中的createRecord方法来创建records. store.createRecord('post', { title: 'Rails is ...

  8. 7.7 Models -- Working with Records

    Modifying Attributes 1. 一旦一条record被加载,你可以开始改变它的属性.在Ember.js对象中属性的行为就像正常的属性.作出改变就像设置你想要改变的属性一样简单: var ...

  9. Models

    Models Models control the data source, they are used for collecting and issuing data, this could be ...

随机推荐

  1. oracle数据库用户加锁和解锁

    oracle数据库安装好之后,scott之类的用户默认情况下是被锁住的,无法使用scott用户登录数据库.使用有alter user数据库权限的用户登陆,角色选sysdba,执行以下命令: 解锁命令: ...

  2. browsersync即时刷新页面

    Browsersync能让浏览器实时.快速响应您的文件更改(html.js.css.sass.less等)并自动刷新页面 官网: http://browsersync.cn/ 多个浏览器.多个设备间来 ...

  3. Unity3D研究院之将UI的点击事件渗透下去(转)

    转自 http://www.xuanyusong.com/archives/4241 处理UI还有3D模型的点击推荐使用UGUI的这套事件系统,因为使用起来比较简洁,不需要自己用代码来发送射线,并且可 ...

  4. wget 无法建立ssl连接 [ERROR: certificate common name ?..ssl.fastly.net?.doesn?. match requested host name ?.ache.ruby-lang.org?. To connect to cache.ruby-lang.org insecurely, use ?.-no-check-certificate?]

    通过wget下载文件,报错 [root@Redmine-186 opt]# wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.6.tar.g ...

  5. [APP] Android 开发笔记 004-Android常用基本控件使用说明

    TextView 文本框 EditText控件 Button 与 ImageButton ImageView RadioButton CheckBox复选框 TextView 文本框 ,用于显示文本的 ...

  6. IntelliJ IDEA导出Java 可执行Jar包

    extends:http://blog.sina.com.cn/s/blog_3fe961ae0102uy42.html 保证自己的Java代码是没有问题的,在IDEA里面是可以正常运行的,然后,按下 ...

  7. C++类继承示例

    C++的子类与孙子类都实现了虚函数时,孙子类的实现会覆盖掉子类的实现. 继承的最主要的应用就是把不同的类放到一个数组中,然后遍历调用同名函数. 实例如下: #include <iostream& ...

  8. Python 核心编程

    第3章 Python 基础 1.语句和语法: 注释(#): 继续换句话说跨行(\):有两种例外情况一个语句不使用反斜线也可以跨行.在使用闭合操作符时,单一语句可以跨多行,如小括号.中括号,花括号等,另 ...

  9. saltstack-----上线环境篇(一)

    在11上安装mysql yum install mariadb mariadb-server -y 在mysql的配置文件my.cnf中加入 init_connect='SET collation_c ...

  10. ubuntu16.04下安装pangolin

    安装教程,具体可以参考github上pangolin的安装文档 https://github.com/stevenlovegrove/Pangolin 首先要安装pangolin的各种依赖项 Glew ...