从具有属性的主干过滤集合
问题描述:
我有一个主干集合,我试图通过属性中的ID进行过滤 基本上,用户有类,并且该类有一个location_id,我想按照位置ID。我的收藏看起来像这样给你一个想法。从具有属性的主干过滤集合
-user -models -0 -attributes -location_id -1 -attributes -location_id -2 -attributes -location_id
我以为我可以过滤这些使用
var get_locations = user_class_collection.filter(function(classes){ console.log(classes); return classes.get(location_id)==location.id; }); console.log(get_locations);
但就是返回一个空数组,当我知道LOCATION_ID是收藏。 任何想法,为什么这不工作?我也试图抢classes.attributes.get
,但它没有更好的
在前几个答复中,正确地提到,我不得不引用get('location_id')
。我现在已经这样做了,但不幸的是,我仍然得到一个空数组。我认为filter
会遍历类,我会得到每个类的控制台输出,但console.log(classes)
只会触发一次。这是一个暗示吗?还是红鲱鱼?
答
您试图从名为location_id参数 的值的类中获取属性,您应该改为创建一个字符串(实际上,您可以选择如何使其成为字符串,单引号或双引号都可以工作)
user_class_collection.filter(function(classes){
return classes.get('location_id') == location.id;
});
答
试试这个:使用骨干最好的办法是在您的收藏使用过滤功能
user_class_collection.select(function(classes){
return classes.get("location_id")==location.id;
});
答
对于过滤收集
var UserCollection = Backbone.Collection.extend ({
filtered : function (id) {
我建议使用UnderScore过滤器,它将返回true为有效,false为无效,其中true是您正在查找的内容。使用this.models来获取当前收集模型使用model.get(“”),以得到你想要检查
var results = _.filter(this.models, function (model) {
if (model.get('location_id') == id )
return true ;
return false ;
});
然后用下划线映射您的结果,并把它转换为JSON像
results = _.map(results, function(model) { return model.toJSON() });
元素
最后返回一个新的骨干集,只有结果
return new Backbone.Collection(results) ;
可选,如果你不希望保留集合中的所有数据,但只是将过滤你应该重新合作llection并跳过上述回报像
this.reset(results) ;
查看呼叫过滤收集和渲染结果
它不应该是'classes.get(“LOCATION_ID”)'? (单引号) – mindandmedia 2012-02-29 22:29:40