2015-09-11 67 views
0

首先,我对Backbone的了解非常有限,现在我试图将一个实现添加到一些我没有创建的代码中。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(); 

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

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

在此先感谢。

回答

1

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

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

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

我相信它的工作原理是因为Backbone将jQuery xhr Object传递给它的错误回调函数。 http://backbonejs.org/#Model-fetch

2

这里是骨干文档的突出部分:

每当一个模型或收集开始与服务器同步的“请求”的事件被发射。如果请求成功完成,您将得到一个“同步”事件,如果不是,则会出现“错误”事件。

这意味着sync事件不应该触发,如果你得到一个401,而应该触发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 
    } 
}); 
+0

谢谢。 我也尝试过这种方法。经过几天的争论后,我发现我所面对的问题不得不采用引导方式而不是骨干网。我试图阻止我的视图(如果我得到了401)的视图的渲染(如果我得到了401)。我在这两天没有注意到的是该模式是由bootstrap独立解雇的,并且与我无关渲染。因此,我试图以多种方式捕捉错误,无法阻止模式打开...在任何情况下,现在我改变了逻辑,以便手动打开模式,如果我没有得到401。 –