У меня есть следующий код, который фильтрует содержимое на одном из моих контроллеров. Шаблон пересекает вычисляемое свойство и отображает элементы. Затем у меня есть текстовый ввод, который фильтрует контент. Все работает отлично, за исключением случаев, когда имеется большое количество элементов, фильтрация становится медленной. Я прочитал нить в другом месте с ответом Тома Дейла, который попытался объяснить это, но пример возвращал 404.Ускорить медленный фильтр содержимого Ember
Куда я иду дальше, пытаясь ускорить это?
Вот код:
Контроллер:
App.PlaylistIndexController = Ember.ObjectController.extend({
filterString: null,
filteredSongs: function() {
var filter = this.get('filterString');
if(filter == undefined) return this.get('content.songs');
filter = filter.toLowerCase();
return this.get('content.songs').filter(function(item, index, enumerable){
if(item.get('artist').toLowerCase().match(filter.toLowerCase()) || item.get('name').toLowerCase().match(filter.toLowerCase()))
return item;
});
}.property('content.songs', 'filterString')
});
Шаблон:
{{#each song in controller.filteredSongs}}
{{song}}{{!-- some song stuff--}}
{{/each}}
Фильтр вход:
{{input valueBinding='filterString' placeholder='Search for songs within playlist'}}
Я - Ember noob, но можете ли вы использовать '@ each' в своей собственности? Что-то вроде ''content.songs. @ Each.artist', 'content.songs. @ Each.name''? Я, честно говоря, понятия не имею, повлияет ли это на производительность:/ –
Я думаю, что вы могли бы ... но, по моему мнению, это проблема с повторным рендерингом контента на каждое нажатие клавиши. – paulruescher