骨干收集,countBy错误

时间:2012-10-25 11:57:24

标签: javascript arrays collections methods underscore.js

我有一个集合,我想通过计算其属性中的相同值来进行分组。 所以我执行这个:

_.countBy(T.collection,function(model){
    return model.get('text')
})

其中attribute是一个字符串。该字符串可以包含字母(A-z),':'和'_'(underscore)。它没有空格。

但代码抛出

  

无法调用未定义的方法'get'。

我也试过

T.collection.countBy(function(model){
    return model.get('text')
})

但它会抛出

  

Object [object Object]没有方法'countBy'

2 个答案:

答案 0 :(得分:7)

countBy不是Underscore methods that are mixed into collections之一,所以,正如您所见,这不起作用:

T.collection.countBy(function(model){ return model.get('text') });

并且集合不是数组,所以这也不起作用:

_.countBy(T.collection,function(model){ return model.get('text') });

当你这样做时,model将不是集合中的模型,它将是T.collection的对象属性的值之一;例如,这个:

_({where: 'is', pancakes: 'house?'}).countBy(function(x) { console.log(x); return 0 });​​​

会在控制台中为您提供ishouse?

但是,T.collection.models是一个数组,是一个模型数组。这意味着这应该有效:

_.countBy(T.collection.models, function(model) { return model.get('text') });

我建议将其作为一种方法添加到您的收藏中,以便外人不必乱用该集合的models属性。

答案 1 :(得分:0)

我可以提出2条建议:

1:集合“模型”中的某处未定义。因此,当你执行model.get('text')时,它会抛出一个错误,因为你无法在未定义的变量上触发方法。也许你的功能应该是:

_.countBy(T.collection,function(model){
    return model ? model.get('text') : ''; // or maybe a null, depending on what you want
});

2:调试使用firebug的控制台来检查模型的值是什么。

_.countBy(T.collection,function(model){
    console.log('model', model);
    return model ? model.get('text') : '';
});

希望这有帮助