同步时的 Backbone 网响应

s4chpxco  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(125)

首先,我对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之前获取状态代码,并根据响应的状态,继续渲染视图,或者简单地显示一条消息,声明访问被拒绝。
抱歉我说得不够清楚。
先谢谢你。

9cbw7uwe

9cbw7uwe1#

以下是主要文档的主要部分:
每当一个模型或集合开始与服务器同步时,就会发出一个“request”事件。如果请求成功完成,就会得到一个“sync”事件,否则就会得到一个“error”事件。
这意味着,如果您得到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
  }
});
zour9fqk

zour9fqk2#

首先,你需要为你的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

相关问题