同步上的骨干响应

时间:2015-09-11 20:40:23

标签: javascript backbone.js

首先,我对Backbone的了解非常有限,目前,我正在尝试将一个实现添加到我没有创建的代码中。

我的问题如下:

我有一个通过点击按钮呈现的集合。现在,我们在网站上设置了一些权限,因此有时我得到的响应是401。

我目前能够得到响应,问题是我不知道如何将它附加到同步事件,这样如果我在调用API时得到401,它就不应该呈现任何内容。

我认为查看代码有助于澄清我的问题:

this.addressBook = new (Backbone.Collection.extend({
        url: url,
        model: Backbone.Model.extend({
            idAttribute: 'ID'
        }),

        parse: function(data) {

            return data;
        }
}))();

    this.addressBook.on('sync', this.renderAddresses, this);
    this.addressBook.fetch();

所以我找到了几种从fetch获取状态代码的方法,但在这种特殊情况下,我需要在sync事件调用this.renderAddress之前获取状态代码,并给出响应的状态,继续渲染我的视图或只是显示一条消息,说明访问被拒绝。

对不起,如果我不够清楚。

提前致谢。

2 个答案:

答案 0 :(得分:2)

以下是主干文档的重要部分:

  

每当模型或集合开始与服务器同步时,都会发出“请求”事件。如果请求成功完成,您将收到“同步”事件,如果没有,则会收到“错误”事件。

这意味着如果您获得401,sync事件不会触发,而应触发error事件。

您可以通过收听所有不同的事件(包括所有可用参数)在您的代码中对此进行测试:

this.listenTo(yourCollection, 'request', function(collection, resp, options) {
  console.log('Request: ', resp);
});
this.listenTo(yourCollection, 'error', function(collection, resp, options) {
  console.log('Error: ', resp);
});
this.listenTo(yourCollection, 'sync', function(collection, resp, options) {
  console.log('Sync: ', resp);
});

因此,您应该只能听取error事件以显示自定义错误消息:

this.listenTo(yourCollection, 'error', function(collection, resp) {
  if (resp.status === 401) {
    console.warn('401: Unauthorized');
  } else {
    // do something else
  }
});

答案 1 :(得分:1)

首先,您需要为addressBook fetch定义一些回调选项。对于您要完成的任务,您需要提供错误回调。

this.addressBook.fetch({
 error: function(xhr) {
   if(xhr.status == 401) { // Put logic you want in the case of 401 here... 
 }
});

免责声明:我没有测试过这段代码,因为我没有方便的方法来重现这个问题。

我相信它有效,因为Backbone将jQuery xhr对象传递给它的错误回调。 http://backbonejs.org/#Model-fetch