0

我确定我犯了这些 Backbone 新手错误之一,但经过一个小时的搜索后,我没有找到解决方案。

问题是:当我尝试从我的集合中获取过滤模型时,出现类型错误“productCollection.getProductByName("M020012").toJSON 不是函数”。

但是,如果我将过滤方法更改为简单的“返回 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. filterfind 方法返回第一个符合条件的模型

下面是代码的样子:

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