是否可以使用下划线的groupBy函数与ember.js?
我有以下尝试显然是不行:
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正在寻找的不同.
解决方法
您可以为ember-data DS-ManyArray对象实现自己的groupBy功能,并扩展_:
_.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');
上面的功能是基于下划线的原始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; };
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。