首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >骨干网过滤

骨干网过滤
EN

Stack Overflow用户
提问于 2012-05-25 00:41:54
回答 2查看 4.4K关注 0票数 5

如果我有一个主干集合,并想要创建该集合的副本并过滤掉某些条目,我如何在将复制的实例保留为Backbone.Collection的同时执行此操作?

示例:

代码语言:javascript
复制
var Module = Backbone.Model.extend();

var ModuleCollection = Backbone.Collection.​extend({
    model: Module
});

​var modules = new ModuleCollection;

​modules.add({foo: 'foo'​​​​​​},{foo: 'bar'});​​​​​

console.log(modules instanceof Backbone.Collection); // true

var filtered = modules.filter(function(module) {
    return module.get('foo') == 'bar';
});

console.log(filtered instanceof Backbone.Collection); // false

http://jsfiddle.net/m9eTY/

在上面的示例中,我希望filtered是模块的过滤版本,而不仅仅是模型的数组。

从本质上讲,我希望在集合实例中创建一个方法,该方法可以过滤掉某些模型并返回Backbone.Collection实例,但是一旦我开始过滤迭代方法,就会返回一个数组。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-25 00:47:36

如果需要,您可以将过滤后的数组包装在临时ModuleCollection中,过滤后的模型与原始ModuleCollection中的模型实例相同,因此,如果模块的属性发生更改,两个集合仍会引用它。

所以我建议你这样做:

代码语言:javascript
复制
var filtered = new ModuleCollection(modules.filter(function (module) {
    return module.get('foo') == 'bar';
}));

从Backbone 0.9.2开始,有一个名为where的额外方法可以做同样的事情:

代码语言:javascript
复制
var filtered = modules.where({foo: 'bar'});

但是它仍然返回一个数组,所以您仍然需要这样包装它:

代码语言:javascript
复制
var filtered = new ModuleCollection(modules.where({foo: 'bar'}));
票数 9
EN

Stack Overflow用户

发布于 2013-10-18 22:09:49

用于使用主干过滤集合

要创建过滤器,您的集合中应该有一个已过滤的函数

代码语言:javascript
复制
var MyCollection = Backbone.Collection.extend ({
  filtered : function () { 

我建议使用UnderScore过滤器,它将返回true表示有效,false表示无效,其中true是您要查找的。使用this.models获取当前集合模型使用model.get( '‘)获取要检查的元素

代码语言:javascript
复制
var results = _.filter( this.models, function ( model ) {           
    if ( model.get('foo') == 'bar' ) 
    return true ; 
    return false ;
});

然后使用下划线映射您的结果,并将其转换为JSON,如下所示可能是您弄错的地方

代码语言:javascript
复制
results = _.map( results, function( model ) { return model.toJSON()  } );

最后,返回一个只有结果的新的主干集合,这是如何制作一个复制的集合

代码语言:javascript
复制
return new Backbone.Collection( results ) ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10741778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档