您好我正在搜索骨干集合,我正在搜索的当前字符串是
项目编号
这应该返回2个结果但是它只显示1个结果,我不明白为什么,下面是我使用的代码,
添加搜索参数时运行的代码
updateSearchFilter: function(e) {
var self = this;
this.collection.each(this.filterHide, this);
if($(e.currentTarget).val() === "")
{
this.collection.each(this.filterShow, this);
}
var activeLabels = $(".labels").find(".inactive");
$.each(activeLabels, function(key, index){
switch($(index).attr("id"))
{
case "pending":
status = "7";
self.filterDetails.states["pending"] = false;
break;
case "completed":
status = "5";
self.filterDetails.states["complete"] = false;
break;
case "archived":
status = "3";
self.filterDetails.states["archived"] = false;
break;
case "active":
status = "1";
self.filterDetails.states["active"] = false;
break;
}
});
var visible = this.collection.search($(e.currentTarget).val(), this.filterDetails.states);
if (visible !== undefined) {
visible.each(this.filterShow, this);
}
},
所以上面的代码隐藏了第一次按键时的个别结果,然后遍历一个jquery对象数组并在一个对象中重新分配一些值 - 这样就完成了我们可以找出我们需要的过滤器搜索。
然后我们运行搜索代码
ProjectCollection.prototype.search = function(searchTerm, filters) {
var pattern;
console.log(filters);
pattern = new RegExp(searchTerm, "gi");
if (filters.active && filters.archived) {
if (searchTerm === "") {
return this;
}
return _(this.filter(function(data) {
return pattern.test(data.get("project_name") + data.get("client_name"));
}));
} else if (filters.active) {
if (searchTerm === "") {
return this.active();
}
return _(this.active().filter(function(data) {
return pattern.test(data.get("project_name") + data.get("client_name"));
}));
} else if (filters.pending) {
console.log("hello");
if (searchTerm === "") {
return this.pending();
}
return _(this.pending().filter(function(data) {
return pattern.test(data.get("project_name") + data.get("client_name"));
}));
} else if (filters.archived) {
if (searchTerm === "") {
return this.archived();
}
return _(this.archived().filter(function(data) {
return pattern.test(data.get("project_name") + data.get("client_name"));
}));
} else if (filters.complete) {
if (searchTerm === "") {
return this.complete();
}
return _(this.complete().filter(function(data) {
return pattern.test(data.get("project_name") + data.get("client_name"));
}));
}
};
ProjectCollection.prototype.archived = function() {
return new ProjectCollection(this.where({
status: '3'
}));
};
ProjectCollection.prototype.active = function() {
return new ProjectCollection(this.where({
status: '1'
}));
};
ProjectCollection.prototype.pending = function() {
return new ProjectCollection(this.where({
status: '7'
}))
};
ProjectCollection.prototype.complete = function() {
return new ProjectCollection(this.where({
status: '5'
}));
}
现在我要回的是2个结果,
项目编号1&项目编号2
但是我只在这个搜索词中得到一个结果,项目编号1的状态为“已存档”,项目编号2的状态为“待定”。然而,即使filters.pending = true
;
如何确保我获得所返回的每个状态的所有匹配项?
答案 0 :(得分:0)
您可以将所有过滤器状态键保存在一个数组中,而不是单独设置过滤器的状态。例如,您的用户希望过滤active
,complete
和pending
,以便您拥有['1','5','7']
的数组
因此,当您通过
过滤相关状态时// filterModes is ['1', '5', '7'];
collection.filter(function(model){
return filterModes.indexOf(model.status) !== -1;
}
其余的应该对你来说更简单
请注意,collection.filter()
和collection.where()
返回的数组和数组可能有filter()
,也可能没有where()
,但绝对没有{{1}}所以要警惕链接函数调用< / p>