Backbone Collection搜索模型属性 - 正确完成

时间:2012-12-09 00:27:21

标签: javascript backbone.js backbone-collections

我有这个漂亮的函数遍历集合中的模型以获取属性和值。如果找到该值则返回true。

在浏览了很多文档之后,我仍然对如何遍历这个问题感到困惑 正确收集以及如何搜索它。由于underscorejs(在我的情况下是lodash)被挂钩到主干上,我会用.each遍历集合

我没有在if (model.get(attribute)===value)之后添加其他内容,因为它会返回false 在遍历整个集合之前。回调函数听起来像不必要的并发症 - 但也许我错了(我几个月前开始使用JS)

我会很高兴提示和/或更好的解决方案;-)与explonation。 提前谢谢。

我使用requirejs,这就是为什么我传递了_,Bacbkone ......

以下是该集合的外观:

function (_, Backbone, AppModels) {

    var QueriesCollection = Backbone.Collection.extend({
        model : AppModels.QueryModel,

        search: function (attribute, value) {
            var found = false;
            this.each(function (model) {
                if (model.get(attribute)===value) {
                    found = true;
                }
            });
            return found;
        }
    });

    return {
        QueriesCollection: QueriesCollection
    };
});

1 个答案:

答案 0 :(得分:6)

你也可以使用下划线some(又名any),它与你的search函数几乎相同,只是它需要一个函数参数作为它的谓词,而不是一个键/值:

  

如果列表中的任何值通过迭代器真值测试,则返回true。如果找到了真正的元素,则短路并停止遍历列表。

实现使用它更直接:

search: function (attribute, value) {
    return this.some(function(x) { 
        return x.get(attribute) === value; 
    });
}