【问题标题】:Using getList() to get an object that includes an array of responses使用 getList() 获取包含响应数组的对象
【发布时间】:2014-12-17 20:06:08
【问题描述】:

我的服务器的 REST API 响应 GET 请求,请求包含如下对象:

bookmark: "g1AAAAEoeJzLYWBgYMlgTmFQSklKzi9KdUhJMjTQy83PzyvOyMxL1UvOyS9NScwr0ctLLckBqmVKZEiy____fxaY4-a0KbA8-7lHcaJQFsgQRbghRvjMSHIAkkn1qMbEBG0VT-RFM8YMnzF5LECSoQFIAU3ajzCqaMqJzw8SedCMMids1AGIUf-RjTrdMTGRMysLAOQyZD8"
rows: [{id: "IPc3JoAvxHJt426ULI8Qwg", order: [20141108190902.652, 21],…},…]
total_rows: 12

我正在使用 Restantular 的 getList() 获取故事,并使用自定义响应拦截器将响应对象转换为故事数组。我的响应拦截器如下所示:

    RestangularProvider.addResponseInterceptor(function (data, operation, what, url, responses, deferred) {
      if(operation !== "getList") return data;
      var response = jQuery.map(data.rows, function(row, i){
                        return (row.doc);
                     });
      return response;  
    });

然而,现在我发现我需要访问服务器响应中的bookmarktotal_rows 属性。我知道getList() 在被要求返回对象而不是数组时会引发错误。所以我不能简单地在我的响应拦截器中返回这样的东西:

return { data:data, stories:response } 

使用 Restangular 获取故事列表和附加属性的最佳方法是什么?

【问题讨论】:

  • 使用 customGET 而不是 getList。 customGET 将允许您拥有对象而不是集合。 getList 需要一个集合作为响应。如果你的响应包含对象,并且你有你的数组和其他东西,那么你应该使用 customGET 方法。

标签: restangular


【解决方案1】:

这是我现在用来解决此问题的 responseInterceptor 示例:

    RestangularProvider.addResponseInterceptor(function (data, operation, what, url, responses, deferred) {

       if(operation !== "getList") return data;

       var response;

       response = jQuery.map(data.rows, function(row, i){
                     return (row.doc);
                  });
       response.meta = { total_rows: data.total_rows, bookmark: data.bookmark };

       return response; 

});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2014-05-14
    • 2015-03-11
    • 2021-02-07
    • 1970-01-01
    相关资源
    最近更新 更多