我有一个骨干集合,我正在尝试按属性中的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)
只会触发一次。这是暗示吗?还是红鲱鱼?
答案 0 :(得分:6)
您正在尝试从名为location_id参数值的类中获取属性 你应该改成一个字符串(实际上你可以选择如何使它成为字符串,单引号或双引号都起作用)
user_class_collection.filter(function(classes){
return classes.get('location_id') == location.id;
});
答案 1 :(得分:1)
对于使用骨干过滤收集,最好的方法是在集合中使用过滤函数
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 ) ;
可选择如果您不想保留集合中的所有数据而只是保留过滤后的数据,则应重置集合并跳过上面的返回
this.reset( results ) ;
查看调用已过滤的集合并渲染结果
答案 2 :(得分:0)
试试这个:
user_class_collection.select(function(classes){
return classes.get("location_id")==location.id;
});