collection.fetch()的选项

时间:2014-07-08 05:18:26

标签: javascript backbone.js backbone.js-collections

我正在尝试一次获取多组相同的集合类型。在获取结果之后,我想基于一些" id"在回调中对结果进行排序,这是我在调用fetch()方法之前在集合上设置的。

问题:如何将集合的ID传递给回调?

我现在正在使用的黑客:我有一个用于存储ID的数组和一个用于存储结果的数组。我在调用fetch方法之前将id推送到ids数组,并在成功回调中推送到结果中。

这个问题:由于id被循环推送,所有这些都是有序的。但是获取发生异步,并且先返回的任何一个被推入结果数组,从而破坏了顺序。

示例代码:

// Current Date
var curDate = new Date();

// List of categories and points
var categories = new Array();
var points = new Array();

// A Backbone Collection
var users = new app.UserList();

for(var i=0; i<=curDate.getMonth(); i++) {
    users.setMonthNumber(curDate.getMonth()-i);
    categories.unshift(parseInt(users.getMonthNumber()+1) + '/12');

    users.fetch({
        success: function(collection, response){
            points.unshift(collection.meta.total_count);
            active_user_chart.series[0].setData(points);
            active_user_chart.axes[0].setCategories(categories);
        },
    });
}

说明: UserLists具有相应的月份编号,必须对其进行排序。它们存储在类别中。结果是列表中的用户数。它存储在点中。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

http://backbonejs.org/#Collection-parse

var Tweets = Backbone.Collection.extend({
  // The Twitter Search API returns tweets under "results".
  parse: function(response) {
    response.results.forEach(function(result){
        result['myOwnId']=result.xyz+result.abc;
    });
    return response.results;
  }
});

以上代码未经测试,只是解释了如何将自己的属性添加到集合中。

为了拥有自己的排序逻辑,您必须在comparator上定义自己的collection。来自文档

  

比较器可以定义为sortBy(传递一个带有a的函数)   单个参数),作为一种排序(传递一个期望的比较器函数)   两个参数),或者表示要按排序的属性的字符串。

示例比较器可能如下所示:

Backbone.Collection.extend({
      // The Twitter Search API returns tweets under "results".
      sortBy: function(model) {
        return model.get('myOwnId');
      }
    });