Итак, ваш контент для просмотра списка управляется ArrayController.Вы можете расширить этот контроллер и создать App.FilteringArrayController
.Я думаю, что инфраструктура SCUI уже имеет своего рода контроллер фильтрации.
App.FilteringArrayController = SC.ArrayController.extend({
searchValue: null, // bind the value of your text field to here.
searchValueDidChange: function(){
this.invokeOnce(this._filterContent); // every time the value changes, filter the content
}.observes('searchValue'),
_filterContent: function(){
var searchVal = this.get('searchValue'),
content = this.get('content'),
filteredContent = [];
// loop over content here, comparing searchVal to some property of the objects
// in content. For every match, add the object to filteredContent
// finally, set the new content.
// any collection views bound to this controller's arrangedObjects property will update
this.set('content', filteredContent);
}
});
Для списков малого и среднего размера это будет работать.
РЕДАКТИРОВАТЬ - на основании ваших разъяснений в комментариях все по-другому.
Хранение миллиона объектов на клиенте не очень хорошая идея.Браузер будет использовать смешное количество памяти.
Таким образом, вы должны изменить приведенный выше код; при изменении значения вы должны инициировать вызов на сервер.Сервер должен сделать поиск для вас.Когда он возвращает результаты (которые должны быть ограничены, скажем, 100 записями), вы обновите контент на контроллере, и графический интерфейс обновится автоматически.
Нет необходимости говорить, что вам понадобится много данныхвысоко оптимизированная реализация на сервере.Вам нужно изменить элементы пользовательского интерфейса, чтобы они были неактивны для поиска.