我正在尝试一次获取多组相同的集合类型。在获取结果之后,我想基于一些" 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具有相应的月份编号,必须对其进行排序。它们存储在类别中。结果是列表中的用户数。它存储在点中。
我该如何解决这个问题?
答案 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');
}
});