筛选具有多个属性的骨干集合

问题描述:

配偶,我有一个客人集合。每位客人都有一个inDate,一个outDate和正在占用床位的id_beds。 我试图过滤所有的客人满足在同一时间下面的语句:筛选具有多个属性的骨干集合

  • id_beds ==床
  • 过时< ==日期
  • 铟酸> ==日期

    App.Collections.Guests = Backbone.Collection.extend({ 
    url: 'guests/', 
    model: App.Models.Guest, 
    getBooking: function(bed, date){ 
    var gf = _.filter(this.models, function(model){ 
        // Get all Guests with id_beds = bed 
         // && outDate < date && inDate <= date 
    }); 
    
    console.log(gf); 
    return gf; 
    } 
    }); 
    

现在,事情是,我不知道如何用这3条语句过滤出集合。 首先,不知道如何比较日期,因为它们是字符串,并且看不到哪个比另一个更大。 第二,不知道如何用多于一个参数进行过滤的逻辑。

任何想法?

谢谢!

+0

哪些字符串格式是你的日期? – mtth 2013-02-19 01:38:16

+0

我使用这种格式:YYYY-MM-DD – Pablo 2013-02-19 01:40:18

你快到了。由于您的日期是YYYY-MM-DD简单的字符串比较的作品和你的过滤功能应该只是返回true当这三个条件都满足:

getBooking: function(bed, date) { 
    var gf = this.models.filter(function(model) { 
    return (
     model.get('outDate') > date && 
     model.get('inDate') <= date && 
     model.get('id_beds') === bed 
    ) 
    }) 
    // ... 
    return gf 
} 

你好这里是过滤收集利用骨干

首先在您的收藏简单的解决方案,你应该有一个过滤功能Like

App.Collections.Guests = Backbone.Collection.extend ({ 
    filtered : function () { 

我建议使用UnderScore过滤器,它将返回true为有效和false为无效,其中true是你在找什么对于。使用this.models来获取当前收集模型使用model.get(“”),以得到你想要检查

var results = _.filter(this.models, function (model) {   
     if (model.get('id_beds') == bed 
      && model.get('outDate') < date 
      && model.get('inDate ') < date) 
     return true ; 
     return false ; 
    }); 

然后用下划线映射您的结果,并把它转换为JSON像

results = _.map(results, function(model) { return model.toJSON() }); 
元素

最后返回一个新的骨干集,只有结果

return new Backbone.Collection(results) ; 

可选,如果你不想让所有的数据集合中,但只是一个filterd你应该重置收集和跳过上面的返回像

this.reset(results) ;