Sah*_*bov 6 javascript map backbone.js underscore.js
目标:我正在尝试创建一个不区分大小写的搜索,该搜索遍历我的集合并尝试将用户查询与模型的name属性进行匹配.现在,如果我想找到特定的模型,搜索查询必须准确.
似乎没有简单的方法在Backbone中做这么简单的事情,而不是开箱即用.map想到了这个功能.如果我可以浏览整个集合并将模型的name属性更改为小写,然后将用户查询更改为小写,那么该怎么办呢!
但问题是我不知道如何使用Backbone Collection和map功能.mapBackbone文档中没有任何文档,除了一个链接,它引导您使用三个数字的数组使用超级原始示例代码强调文档.
这不起作用......为什么?
this.collection.map(function(model) {
return model.get('name').toLowerCase();
});
Run Code Online (Sandbox Code Playgroud)
实际上,所有下划线的集合方法都在Backbone.Collection对象上代理.当你这样做时,collection.map(...它返回映射函数返回的一个对象数组.raina77ow提供的解决方案不起作用,因为Backbone.Collection不是数组,并且将地图的结果分配给this.collection将破坏集合本身.
如果要过滤集合,我建议使用该filter方法.(我假设你的工作是Backbone.View:
var filter = this.$('#search-field').val(),
filteredModels = this.collection.filter( function( model ) {
return model.get('name').toLowerCase() === filter;
};
this.collection.reset( filteredModels );
Run Code Online (Sandbox Code Playgroud)
请注意,集合中任何下划线的代理方法都将返回一组模型.如果您想使用它们,可以使用这些模型重置集合,或者等效地将集合的模型属性设置为过滤结果:this.collection.models = filteredModels.第一种形式的优点是可以触发reset您可以收听的集合上的事件,例如重新渲染视图.