4

属性の同じ値を数えてグループ化したいコレクションがあります。だから私はこれを実行します:

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

ここで、属性は文字列です。この文字列には、文字(Az)、':'、および'_'(アンダースコア)を含めることができます。空白はありません。

しかし、コードはスローします

undefinedのメソッド'get'を呼び出すことはできません。

私も試してみました

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

しかし、それは投げます

オブジェクト[オブジェクトオブジェクト]にはメソッド'countBy'がありません

4

2 に答える 2

7

countByコレクションに混在する Underscore メソッドの 1 つではないため、ご覧のとおり、これは機能しません。

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

また、コレクションは配列ではないため、これも機能しません。

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

これを行うと、modelはコレクション内のモデルにはならず、T.collectionのオブジェクト プロパティの値の 1 つになります。たとえば、次のようになります。

_({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

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

お役に立てれば

于 2012-10-25T12:10:48.367 に答える