sproutcore - меню поиска с динамическим контентом - PullRequest
0 голосов
/ 27 октября 2011

я пытаюсь создать то же самое, что показано в документе sproutcore http://docs.sproutcore.com/

поле поиска с левой стороны и его динамически изменяемое содержимое ниже. я настроил SC.ListView с его contentBinding и все мои приборы показаны.

как я могу подключить вход от SC.TextFieldView к содержимому моего SC.ListView? Может ли кто-нибудь предоставить полезную ссылку или, возможно, указать правильное направление?

спасибо

1 Ответ

1 голос
/ 23 декабря 2011

Итак, ваш контент для просмотра списка управляется 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 записями), вы обновите контент на контроллере, и графический интерфейс обновится автоматически.

Нет необходимости говорить, что вам понадобится много данныхвысоко оптимизированная реализация на сервере.Вам нужно изменить элементы пользовательского интерфейса, чтобы они были неактивны для поиска.

...