我正在使用一些搜索功能,每次用户输入文本输入时我都会过滤一个集合,这里是代码,
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);
但是这似乎永远不会运行,我也尝试在初始化函数中初始化我的结果视图,但我无法将集合传递给该视图,因为它是空的最佳方法是什么?
答案 0 :(得分:0)
你必须小心骨干中的观点。您不断添加新的搜索结果视图而不删除旧的搜索结果视图。始终保持对您多次添加的视图的引用,以便您可以删除上一个视图。我认为这部分会帮助你:
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();
},