我正在尝试一次获取多组相同集合类型。获取结果后,我想根据一些“id”对回调中的结果进行排序,这些“id”是我在调用 fetch() 方法之前在集合上设置的。
问题:如何将集合的 id 传递给回调?
我现在正在使用的技巧:我有一个用于存储 id 的数组和一个用于存储结果的数组。在调用 fetch 方法之前,我将 id 推送到 ids 数组,并将结果推送到成功回调中。
这样做的问题:由于 id 是在循环中推送的,因此所有 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);
},
});
}
说明:用户列表具有相应的月份编号,必须根据该月份编号进行排序。它们存储在类别中。列表中的用户数就是结果。它以点的形式存储。
我该如何解决这个问题?
最佳答案
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;
}
});
上面的代码未经测试,只是解释了如何将自己的属性添加到集合中。
为了拥有自己的排序逻辑,您必须在集合
上定义自己的比较器
。来自文档
A comparator can be defined as a sortBy (pass a function that takes a single argument), as a sort (pass a comparator function that expects two arguments), or as a string indicating the attribute to sort by.
示例比较器可能如下所示:
Backbone.Collection.extend({
// The Twitter Search API returns tweets under "results".
sortBy: function(model) {
return model.get('myOwnId');
}
});
关于javascript - collection.fetch() 的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24624185/