在Backbone Collection .filter()中的每个模型上调用.toJSON()

时间:2013-04-15 15:15:38

标签: backbone.js

我有这段代码:

        var products = kf.Collections.products.filter(function(product) {
            return product.get("NominalCode") == chargeType
        });

        if (products.length) {
            for (x in products) {
                products[x] = products[x].toJSON();
            }
        }

        return products;

我是否正确地认为可能有更多的Backbone方式来执行for in循环?

1 个答案:

答案 0 :(得分:0)

您可以使用Collection.where

简化过滤器
  

其中 collection.where(attributes)
  返回集合中与传递的属性匹配的所有模型的数组。对...有用   过滤的简单案例。

您可以使用_.invoke

删除for循环
  

调用 _.invoke(list,methodName,[* arguments])
  在列表中的每个值上调用 methodName 命名的方法。任何额外的   传递给invoke的参数将被转发到该方法   调用

这些修改可能看起来像

var products = kf.Collections.products.where({
    NominalCode: chargeType
});

return _.invoke(products, 'toJSON');

http://jsfiddle.net/nikoshr/3vVKx/1/

如果您不介意使用chained methods

更改操作顺序
return kf.Collections.products.chain().
    invoke('toJSON').
    where({NominalCode: chargeType}).
    value()

http://jsfiddle.net/nikoshr/3vVKx/2/

或者@kalley在评论中提出的一个简单的

_.where(kf.Collections.products.toJSON(), { NominalCode: chargeType })