我正在使用三个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
,但我不认为这适用于这种情况,因为它不是简单地检查属性是否等于某个值。
由于
答案 0 :(得分:0)
所有Collection方法都继承自Underscore,它将它们作为数组返回,而不是作为新的Collection返回。如您所说,您可以从返回的数组创建一个新的Collection,或者如果您正在尝试操作当前的Collection,则可以使用Backbone.Collection.reset。
此外,如果你想在一个视图中渲染一堆子视图,使用数组应该可以正常工作,因为你只需循环遍历数组并为每个返回的模型(模块?)创建一个子视图它们是当前视图,无需操纵Collection本身。