4

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

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

其中属性是一个字符串。该字符串可以包含字母 (Az)、':' 和 '_'(下划线)。它没有空格。

但是代码抛出

无法调用未定义的方法“get”。

我也试过

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

但它抛出

对象 [对象对象] 没有方法“countBy”

4

2 回答 2

7

countBy不是混合到集合中的下划线方法之一,因此,正如您所见,这不起作用:

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属性。

于 2012-10-25T16:57:51.663 回答
0

我可以提出两个建议:

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') : '';
});

希望这可以帮助

于 2012-10-25T12:10:48.367 回答