0

我正在开发一个 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)

    });
4

1 回答 1

0

不是过滤,而是将过滤results器的结果放在另一个数组中(“匹配”)。

保留原始集合内容(模型)的副本。

视图应该只渲染模型中匹配的元素。或者,此逻辑可以完全发生在视图级别,因为不涉及实际的模型逻辑。

于 2013-05-23T01:46:29.693 回答