在keyup上初始化一个视图到多个视图- backbone

Initialising a view on keyup to many views - backbone

本文关键字:视图 keyup backbone 一个 初始化      更新时间:2023-09-26

我有一些搜索功能,我正在工作,每次用户输入文本输入我过滤一个集合,这里是代码,

userSearch: function() {
    var that = this;
    var letters = $('.js-user-search').val();
    this.filteredCollection.reset(that.filterUsers( that.collection, letters));
    var resultsList = new app.SearchUserResults({
        collection: this.filteredCollection
    });
    resultsList.render();
},
filterUsers: function( collection, filterValue) {
    var filteredCollection;
    if (filterValue === "") {
        return collection.toJSON();
    }
    return filteredCollection = collection.filter(function(data) {
        return _.some(_.values(data.toJSON()), function(value) {
            if( value != undefined ) {
                value = (!isNaN(value) ? value.toString() : value);
                //var re = /^(([^<>()[']''.,;:'s@'"]+('.[^<>()[']''.,;:'s@'"]+)*)|('".+'"))@(('[[0-9]{1,3}'.[0-9]{1,3}'.[0-9]{1,3}'.[0-9]{1,3}'])|(([a-zA-Z'-0-9]+'.)+[a-zA-Z]{2,}))$/;
                return value.indexOf(filterValue) >= 0;
            }
        });
    });
}

从上面的代码中可以看到,我将一个集合(用户)和搜索参数传递给filterUsers(),然后返回一个匹配模型的集合。然后我试图将其呈现为搜索结果(链接)的列表,但是这些链接上的事件运行多次(取决于搜索字符串的长度)。

如何从返回集合中构建结果列表?我试着添加,

this.filteredCollection.on('reset', this.doSomething);然而,这似乎从来没有得到运行,我已经尝试在初始化函数中初始化我的结果视图,但我不能将集合传递给该视图,因为它是空的,最好的方法是什么?

你必须小心使用骨干中的视图。您不断添加新的搜索结果视图,而不删除旧的。始终保留对多次添加的视图的引用,以便可以删除前一个视图。我想这部分会对你有所帮助:

var myCurrentSearchList = null;
userSearch: function() {
  var that = this;
  var letters = $('.js-user-search').val();
  this.filteredCollection.reset(that.filterUsers( that.collection, letters));
  if (myCurrentSearchList) {
    myCurrentSearchList.remove();
  }
  var resultsList = new app.SearchUserResults({
    collection: this.filteredCollection
  });
  myCurrentSearchList = resultsList;
  resultsList.render();
},

http://backbonejs.org/View-remove