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

Ino*_*ble 1 javascript backbone.js backbone.js-collections

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

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

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

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

我使用requirejs,为什么我通过_,Bacbkone ......

以下是Collection的外观:

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
    };
});
Run Code Online (Sandbox Code Playgroud)

McG*_*gle 6

您也可以使用Underscore some(aka any),它几乎与您的search函数相同,除了它使用函数参数作为其谓词,而不是键/值:

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

实现使用它有点直接:

search: function (attribute, value) {
    return this.some(function(x) { 
        return x.get(attribute) === value; 
    });
}
Run Code Online (Sandbox Code Playgroud)