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;
});
});