Comments 31
наверное нужно перенести в Q&A
+5
Это работающий пример использования, который можно взять и адаптировать под свои нужды.
Также это призыв к обсуждению, чтобы найти, как правильно использовать Knockout и как делать не нужно.
Также это призыв к обсуждению, чтобы найти, как правильно использовать Knockout и как делать не нужно.
+1
Тем более надо в Q&A. А вот когда уже будет найден оптимальный вариант, тогда и можно будет с ним сделать статью.
+2
Извините, если ввел в заблуждение. Пример использует те Лучшие практики, которые мне известны (например, практика о том, где именно фильтровать
observableArray
habrahabr.ru/post/124931/) и является оптимальным для изучения. Но понимаю — можно сделать лучше. Именно это побудило задать вопросы в конце статьи и сделать примечание в начале.+1
Как то странно, в заголовке вы пишите о фильтрации, а в примере все крутиться вокруг сортировки.
Да я видел что там есть фильтр «закончившиеся» но у меня вопрос во что это превратиться когда фильтров будет больше, намного больше?
FilteredItems превратиться в монстра, а самое веселое начнется когда вас попросят добавить, скажем rss по результатам поиска, вам придется все это дублировать на сервере.
Для поиска «лучших» решений предлагаю посмотреть в сторону Apache Solr, для затравки вот небольшое видео: m.youtube.com/watch?v=-LD1aCxYODI
Да я видел что там есть фильтр «закончившиеся» но у меня вопрос во что это превратиться когда фильтров будет больше, намного больше?
FilteredItems превратиться в монстра, а самое веселое начнется когда вас попросят добавить, скажем rss по результатам поиска, вам придется все это дублировать на сервере.
Для поиска «лучших» решений предлагаю посмотреть в сторону Apache Solr, для затравки вот небольшое видео: m.youtube.com/watch?v=-LD1aCxYODI
0
1. Завернуть весь код в self-invoking функцию
2. Функции сортировки, если больше нигде не используются вполне могут быть использованы по месту.
3. В Java Script есть оператор switch case, чтоб не писать вот это
2. Функции сортировки, если больше нигде не используются вполне могут быть использованы по месту.
3. В Java Script есть оператор switch case, чтоб не писать вот это
if (sortType == 'asc')
viewModel.items.sort(sortAsc);
else if (sortType == 'date')
viewModel.items.sort(sortDate);
+1
но в данном случае я бы сделал что-то вроде
var sortTypes = {
'asc': function(left,right) {...} ,
'date': function(left,right) {...}
}
...
if(sortTypes[sortType]) viewModel.items.sort(sortTypes[sortType]);
+1
Так чуть интереснее:
sortTypes[sortType] && viewModel.items.sort(sortTypes[sortType]);
0
Можно и так, но IMHO хуже читается. Такой способ вызова хорош для присваивания.
0
Ну не знаю, мне например блок «if» без фигурных скобок глаз режет, пускай там даже и один оператор внутри, а так нет «if» — нет скобок, формальности соблюдены :)
+1
Но если блок «if» без фигурных скобок, в котором один оператор (естественно), но он перенесён на другую строку и отделён табуляцией (пробелами), то всё вполне нормально.
...
if ( sortTypes[ sortType ] )
viewModel.items.sort(sortTypes[sortType]);
...
0
js(h|l)int не пропустил бы.
0
Согласен, это уже вопрос религии. На мой взгляд, такой код хорошо читается, чуть-чуть меньше вешает (чище, аля питон) и вполне валидный. С таким же успехом можно говорить про точку с запятой. Главное понимать как это работает и делать код читаемым, если задача позволяет.
0
Код то читаемый, а вот если чего добавить надо внутрь условия, нужно будет расставлять скобки за кого-то. А с точкой запятой ситуация другая: пропустив ее можно получить проблемы при минификации.
0
Не совсем религии, так практичнее и однозначнее.
0
Для присваивания как раз не так хорошо, потому что этот блок присваивания нужно будет обрамить в круглые скобки.
0
Ну и по названиям функций/полей мешанина — тяжело врубится потом будет, что они на самом деле делают. getFilter — возвращает тип сортировки, а называется… filterSimple — как бы и не фильтр совсем — это вид представления. Сомнения вызывает способ переключения между упрощенным и… не упрощенным видом. Обычно для этого применяют шаблоны. Возможно тут достаточно просто переключить CSS класс, но обычной практикой я бы назвал шаблоны.
0
knockoutjs.com/documentation/extenders.html
www.knockmeout.net/2012/08/thatconference-2012-session.html
Можно делать обертки вокруг observables если не нравятся экстендеры, или добавлять логику в .fn метод, вобще есть милиард способов решить эту проблему, но автор видимо привык решать вопросы в гугле.
www.knockmeout.net/2012/08/thatconference-2012-session.html
Можно делать обертки вокруг observables если не нравятся экстендеры, или добавлять логику в .fn метод, вобще есть милиард способов решить эту проблему, но автор видимо привык решать вопросы в гугле.
0
Как-то на статью вообще ни разу не тянет: ни объяснений по коду, ни описанного принципа. Таких примеров на Knockoutjs.com целая куча
0
Sign up to leave a comment.
Articles
Change theme settings
KnockoutJS: фильтрация списка с сохранением состояния