从具有属性的主干过滤集合

问题描述:

我有一个主干集合,我试图通过属性中的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)只会触发一次。这是一个暗示吗?还是红鲱鱼?

+3

它不应该是'classes.get(“LOCATION_ID”)'? (单引号) – mindandmedia 2012-02-29 22:29:40

您试图从名为location_id参数 的值的类中获取属性,您应该改为创建一个字符串(实际上,您可以选择如何使其成为字符串,单引号或双引号都可以工作)

user_class_collection.filter(function(classes){ 
    return classes.get('location_id') == location.id; 
}); 
+0

谢谢桑德,虽然这可能是问题之一(我最初给你的观点,显然我有另一个问题继续,我已经更新了这个问题 – pedalpete 2012-03-01 12:26:00

+0

原来我需要触发后答复,谢谢 – pedalpete 2012-03-01 17:33:00

试试这个:使用骨干最好的办法是在您的收藏使用过滤功能

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) ; 

查看呼叫过滤收集和渲染结果