ember.js - 在 Ember.js 中使用 underscore.js groupBy

标签 ember.js underscore.js

是否可以在 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/

相关文章:

javascript - 主干 View 结构 : how to nest a view in a layout and delegate events

ember.js - 使用 HistoryLocation 从不匹配的路线转移用户

ember.js - ember 中的数据共享

javascript - 使用下划线将两个键和值数组合并到一个对象

javascript - 消除 ng-keypress 的抖动

javascript - 如何将 package.json 数组传递给 grunt.js

javascript - Ember.js 两个API的资源名称相同

javascript - 将数组嵌入对象传递到动态表单的 ember.js 路由时遇到问题

javascript - Ember 控件在发送操作后不会返回循环

javascript - 我们应该使用 "use strict"吗?与第三方库(主干,下划线)?我们怎么知道它们是 'strict' 兼容的?