我有一个集合,我想通过计算其属性中的相同值来进行分组。 所以我执行这个:
_.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'
答案 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 });
会在控制台中为您提供is
和house?
。
但是,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') : '';
});
希望这有帮助