如何为Backbone集合创建自定义过滤器?

时间:2015-05-28 16:18:46

标签: javascript html backbone.js

我正在使用三个Backbone模型/集合,我需要能够创建一个类似于.filter方法内置的JavaScripts的自定义过滤器。我有Build模型与Backbone.HasMany模型有Module关系。第三个模型是Access,它具有特定的构建和来自该构建模块集合的模块子集,以允许访问用户。

我认为让管理员编辑访问权限。当管理员更改构建时,我希望模块列表使用某种类型的过滤器自动更新自己,但我无法轻松找到它。这是我正在寻找的一些伪代码......

var build = access.get('build');
var modules = access.get('modules'); //backbone collection of module models
function onBuildChange(new_build){
    modules = modules.filter(function(module)){
        //if the new build contains this module, keep it in the colleciton
        return new_build.contains(module);
    }
    //update the ui to only show the new modules
    this.render();
}

我尝试在集合中使用.filter并且没有错误输出,但它只返回一个JavaScript数组。我知道我可以从该阵列创建一个新的集合,但我想知道Backbone中是否有任何内置处理这个。我知道.where,但我不认为这适用于这种情况,因为它不是简单地检查属性是否等于某个值。

由于

1 个答案:

答案 0 :(得分:0)

所有Collection方法都继承自Underscore,它将它们作为数组返回,而不是作为新的Collection返回。如您所说,您可以从返回的数组创建一个新的Collection,或者如果您正在尝试操作当前的Collection,则可以使用Backbone.Collection.reset

此外,如果你想在一个视图中渲染一堆子视图,使用数组应该可以正常工作,因为你只需循环遍历数组并为每个返回的模型(模块?)创建一个子视图它们是当前视图,无需操纵Collection本身。