返回介绍

模型 - 持久化记录

发布于 2020-02-21 15:48:03 字数 2550 浏览 1023 评论 0 收藏 0

英文原文:http://emberjs.com/guides/models/persisting-records/

Ember Data中的记录都基于实例来进行持久化。调用DS.Model实例的save()会触发一个网络请求,来进行记录的持久化。

下面是几个示例:

1
2
3
4
5
6
var post = store.createRecord('post', {
  title: 'Rails is Omakase',
  body: 'Lorem ipsum'
});

post.save(); // => POST to '/posts'
1
2
3
4
5
6
7
var post = store.find('post', 1);

post.get('title') // => "Rails is Omakase"

post.set('title', 'A new post');

post.save(); // => PUT to '/posts/1'

承诺

save()会返回一个承诺,这使得可以非常容易的来处理保存成功和失败的场景。下面是一个通用的模式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

对于失败的网络请求,承诺也可以方便的来处理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var post = store.createRecord('post', {
  title: 'Rails is Omakase',
  body: 'Lorem ipsum'
});

var onSuccess = function(post) {
  this.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

更多关于承诺的内容请参看这里,下面是一个示例展示了如何在重试失败的持久化操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function retry(callback, nTimes) {
  // if the promise fails
  return callback().fail(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);
    }

    // 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);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文