2014-12-03 72 views
0

目前我所拥有的是差不多的工作。我正在使用以下内容:如何通过骨干中的多个选择选项进行过滤

this.collection.reset(jobArray, {silent: true}); 

var filterDepartment = this.filterDepartment; 
var filterCategory = this.filterCategory; 
var filterLocation = this.filterLocation; 

var filteredResult = this.collection.where({ 
    department: filterDepartment, 
    category: filterCategory, 
    location: filterLocation 
}); 

this.collection.reset(filteredResult); 

如果我选择部门,类别和位置,此功能非常有用。但是,如果我只想按部门+位置过滤,将类别作为默认的“全部”值,则应在所有类别中返回已过滤/选定的部门和位置。此外,如果我选择一个类别,则选择“全部”,然后只能按位置搜索。

我有办法做到这一点,但它是很多代码,当然有更简单的方法吗?

回答

0

如何

this.collection.reset(jobArray, {silent: true}); 

var filterDepartment = this.filterDepartment; 
var filterCategory = this.filterCategory; 
var filterLocation = this.filterLocation; 

var filter = {}; 
if (filterDepartment) 
    filter['department'] = filterDepartment 

if (filterCategory) 
    filter['category'] = filterCategory; 

if (filterLocation) 
    filter['location'] = filterLocation; 

console.log(filter); // Dump the filter 

var filteredResult = this.collection.where(filter); 

this.collection.reset(filteredResult); 
+0

这是主要工作,谢谢!现在唯一的问题是,一旦我选择了一个选项,然后选择默认的“全部”选项,一切都隐藏了。我试着将你的代码改为: if((filterDepartment)&&(filterDepartment!='all')) – emily 2014-12-03 22:53:50

+0

if(filterDepartment && filterDepartment!='all')'对我来说听起来正确。你确定它是“全部”(而不是全部或全部)吗?也尝试在分配过滤器后转储过滤器,并查看它是否正确(更新后的问题)。 – 2014-12-03 23:14:40

+0

它正在工作,但我必须在条件语句中包装整个事情。谢谢你的帮助! [这是最终的代码](http://stackoverflow.com/a/27283544/965940) – emily 2014-12-03 23:23:29

0

使用Khang Nguen代码并添加条件语句解决,最终的代码如下:

if ((!this.filterDepartment) && (!this.filterCategory) && (!this.filterLocation)) { 
    this.collection.reset(jobArray); 
} else { 
    this.collection.reset(jobArray, {silent: true}); 

    var filterDepartment = this.filterDepartment; 
    var filterCategory = this.filterCategory; 
    var filterLocation = this.filterLocation; 

    var filter = {}; 
    if (filterDepartment) { 
     filter['department'] = filterDepartment; 
    } 

    if (filterCategory) { 
     filter['category'] = filterCategory; 
    } 

    if (filterLocation) { 
     filter['location'] = filterLocation; 
    } 

    var filteredResult = this.collection.where(filter); 

    this.collection.reset(filteredResult); 
} 

也从默认的选择选项中删除了“所有”值。