我正在使用Backbone应用程序来显示从Soundcloud中提取的歌曲。 我有搜索栏作为歌曲集的过滤器。
结果是歌曲列表
var matched = results.filter(function(model) {
return model.attributes.title.toLowerCase().indexOf(val.toLowerCase()) > -1
});
results.reset(matched);
这很好用,我输入时歌曲就会消失。 但是我试图找到一种方法,一旦他们再次遇到搜索字符串,就将它们添加回集合中。
此时,当我回到一个空的搜索字符串时,唯一显示的是搜索到达的结果。
==================编辑==================
这就是我最终做的事情
$("#query").on('focus', function(){
var history = results.clone();
$(this).on('keyup', function(){
var val = $(this).val();
var matched = history.filter(function(model) {
return model.get('title').toLowerCase().indexOf(val.toLowerCase()) > -1
});
results.reset(matched)
});
答案 0 :(得分:0)
不是过滤results
而是将过滤器的结果放在另一个数组中('匹配')。
保留原始收藏内容(模型)的副本。
视图应仅呈现匹配的模型元素。或者,此逻辑可以完全在视图级别发生,因为不涉及实际的模型逻辑。