筛选具有多个属性的骨干集合
问题描述:
配偶,我有一个客人集合。每位客人都有一个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条语句过滤出集合。 首先,不知道如何比较日期,因为它们是字符串,并且看不到哪个比另一个更大。 第二,不知道如何用多于一个参数进行过滤的逻辑。
任何想法?
谢谢!
答
你快到了。由于您的日期是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) ;
哪些字符串格式是你的日期? – mtth 2013-02-19 01:38:16
我使用这种格式:YYYY-MM-DD – Pablo 2013-02-19 01:40:18