0

私はこれらのバックボーンの初心者の間違いの1つを犯していると確信していますが、1時間探し回った後、解決策が見つかりませんでした.

問題は次のとおりです。コレクションからフィルター処理されたモデルを取得しようとすると、「productCollection.getProductByName("M020012").toJSON は関数ではありません」というタイプ エラーが発生します。

しかし、フィルター メソッドを単純な "return this.at(0)" に変更すると、有効なモデルが得られます。

それはなぜですか、そして解決策は何ですか?

これがJSFiddleです

var products = [{
    "name": "M020013",
    "gender": "M",
    "pictures": [{
        "picture": {}}]},
{
    "name": "M020012",
    "gender": "M",
    "pictures": [{
        "picture": {}}]},
{
    "name": "M020011",
    "gender": "M",
    "pictures": [{
        "picture": {}}]}
];

var Product = Backbone.Model.extend({});

var ProductCollection = Backbone.Collection.extend({
    model: Product,
    getProductByName: function(productName) {
        //return this.at(0);

        return this.filter(
            function(product) {
            return product.get('name') === productName;
        });
    }
});

var productCollection = new ProductCollection();

productCollection.on('reset', function() {
    console.log('reset');
    console.log(productCollection.getProductByName('M020012'));
    console.log(productCollection.getProductByName('M020012').toJSON());
});

productCollection.reset(products);
4

1 に答える 1

3

これfilterは、モデルの配列を返すためです。また、JavaScript の配列には機能がありませんtoJSON

配列ではなくモデルを返したいので、代わりに を使用できfindますfilter。find メソッドは、条件に一致する最初のモデルを返します

コードは次のようになります。

getProductByName: function(productName) {
  return this.find(function(production) {
    return production.get('name') === productName;
  });
}
于 2012-08-08T18:52:19.837 に答える