Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按Backbone.js中的子字符串筛选集合_Javascript_Backbone.js_Underscore.js - Fatal编程技术网

Javascript 按Backbone.js中的子字符串筛选集合

Javascript 按Backbone.js中的子字符串筛选集合,javascript,backbone.js,underscore.js,Javascript,Backbone.js,Underscore.js,如果我想做一个收集自动完成,什么是最好的方式?我想看看搜索字符串是否在我的模型中的任何(或少数)属性中 我在想类似于 this.collection.filter(function(model) { return model.values().contains($('input.search]').val()); }) 编辑对不起,我一定解释得不够清楚。如果我有一个具有属性的集合 [ { first: 'John', last: 'Doe'}, { first: 'Mary

如果我想做一个收集自动完成,什么是最好的方式?我想看看搜索字符串是否在我的模型中的任何(或少数)属性中

我在想类似于

this.collection.filter(function(model) {
    return model.values().contains($('input.search]').val());
})
编辑对不起,我一定解释得不够清楚。如果我有一个具有属性的集合

[ 
  { first: 'John', last: 'Doe'}, 
  { first: 'Mary', last: 'Jane'} 
]

我想在我的搜索中输入
a
,捕捉keyup事件,然后过滤掉
{first:'Mary',last:'Jane'}
,因为John和Doe都不包含
a

您可以查看模型的
属性来执行类似的操作

var search = $('input.search]').val();
this.collection.filter(function(model) {
    return _.any(model.attributes, function(val, attr) {
        // do your comparison of the value here, whatever you need
        return ~val.indexOf(search);
    });;
});

您不需要筛选和比较值。主干网有一个内置的方法
,其中
从集合中获取模型的子集


您希望
集合中的
model
v
中的任何值都包含您的搜索文本
q
。这可以转化为以下内容

var q = $('input.search').val();
this.collection.filter(function(model) {
    return _.any(model.values(), function(v) {
        return ~v.indexOf(q);
    });
})

我用这个。。。不区分大小写,我的模型属性子集的子字符串匹配

var search = $(e.currentTarget).val().toLowerCase();
this.collection.filter(function(model) {
  return _.some(
    [ model.get('first'), model.get('last') ], 
    function(value) {
      return value.toLowerCase().indexOf(search) != -1;
    });
 });

到目前为止,我还有另一个答案,但我完全支持你的答案。。。不知道那个功能!:)但我正在将该功能作为自动完成来实现。我想输入并立即过滤。所以我在找火枪手,我输入“Musk”我想让它工作。此外,我希望它能够搜索多个属性(如果不是全部的话)。我是盲人吗?我在文档中的任何地方都没有看到
。编辑哦,
\的别名。一些
是的,这就是我要找的。是否所有浏览器都支持
string.contains()
?为什么我一直在使用
string.indexOf()
?@savinger,因为没有
包含
方法:我只是抄袭了OP写的东西,没有考虑它。好吧,事实上,有!我完全搞糊涂了。请看这一节……它是用Chrome支持的,刚刚测试过。但我将使用
索引of
var search = $(e.currentTarget).val().toLowerCase();
this.collection.filter(function(model) {
  return _.some(
    [ model.get('first'), model.get('last') ], 
    function(value) {
      return value.toLowerCase().indexOf(search) != -1;
    });
 });