首先,我对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之前获取状态代码,并给出响应的状态,继续渲染我的视图或只是显示一条消息,说明访问被拒绝。
对不起,如果我不够清楚。
提前致谢。
答案 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