是否可以在 ember.js 中使用下划线的 groupBy 函数?
我有以下尝试显然不起作用:
var activities = App.store.findMany(App.Activity, feed.mapProperty('id').uniq())
var grouped = _.groupBy(activities, function(activity){
return activity.get('dateLabel;')
});
我收到以下错误:
Object App.Activity has no method 'get'
商店加载了正确的数据,因此 findMany 不会进行远程调用。
问题是 findMany 返回一个 DS.ManyArray 这可能与 _.groupBy 正在寻找的有很大不同。
最佳答案
您可以实现自己的 groupBy
为 ember-data DS-ManyArray 对象量身定制的函数并扩展 _
用它:
_.emberArrayGroupBy = function(emberArray, val) {
var result = {}, key, value, i, l = emberArray.get('length'),
iterator = _.isFunction(val) ? val : function(obj) { return obj.get(val); };
for (i = 0; i < l; i++) {
value = emberArray.objectAt(i);
key = iterator(value, i);
(result[key] || (result[key] = [])).push(value);
}
return result;
};
现在你可以打电话
var grouped = _.emberArrayGroupBy(activities, function(activity) {
return activity.get('dateLabel');
});
或者更简单
var grouped = _.emberArrayGroupBy(activities, 'dateLabel');
以上函数基于underscore的原创
groupBy()
实现,看起来非常相似:_.groupBy = function(obj, val) {
var result = {};
var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; };
each(obj, function(value, index) {
var key = iterator(value, index);
(result[key] || (result[key] = [])).push(value);
});
return result;
};
关于ember.js - 在 Ember.js 中使用 underscore.js groupBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10899668/