2015-01-29 4 views
0

Действительно оцените некоторую помощь в сохранении моих волос, которые остались. Я создаю базовое приложение CRUD, используя node.js + express + mongoDB + EJS. Я должен сказать, что EJS имеет ужасную документацию, что делает ее очень тяжелой для нас, новичков, чтобы ее изучить. Вот проблема, которую я испытываю.Фильтр сортировки EJS не работает

У меня есть объект под названием «транспортные средства», и я показываю его в элементе выбора формы. Вот мой EJS:

<% vehicles.forEach(function(el){ %> 
    <option value="<%= el.vehicleModel %>"><%= el.vehicleModel %></option> 
<% }); %> 

проблема, потому что это собирание от объекта, переданного по MongoDB, это не сортируется. Я отправился в Гуглинг и нашел this nice tutorial. EJS имеет фильтры, которые (предполагается) для решения этой проблемы. Так что я попытался следующий код:

<% vehicles.forEach(function(el){ %> 
    <option value="<%=: el.vehicleModel | sort %>"><%=: el.vehicleModel | sort %></option> 
<% }); %> 

Но он бросает мне следующую ошибку:

прототип объекта может быть только объект или нуль

Так что я подумал, что что-то случилось с моим кодом. Я переделал его другим фильтром (нижний регистр) и использовал его следующим образом:

<% vehicles.forEach(function(el){ %> 
    <option value="<%=: el.vehicleModel | downcase %>"><%=: el.vehicleModel | downcase %></option> 
<% }); %> 

И это работает. Символы занижены. Тогда почему фильтр сортировки не работает?

P/S: Там идет еще волосы мой ..

+0

Я знаю, что этот вопрос решен, но вы должны прекратить использование фильтров, поскольку они устарели. –

ответ

1

Рода фильтр принимает массив в качестве входных данных, а не строка. Что-то вроде следующего будет работать:

<%=: vehicles | sort_by:'vehicleModel' | map:'vehicleModel' %> 

Хотя он может не дать тот же результат, который вы ищете. В этом случае вам нужно отсортировать до начала работы в js. Если набор данных транспортного средства достаточно велик, я рекомендую его сортировать прямо в запросе mongodb.

Надеюсь, это поможет.

+0

Большое спасибо Akash..Это делает сортировку данных..Апология, если это вопрос noobie, но как только я отсортировал массив, могу ли я присвоить это переменной, чтобы я мог взять ее как .length и передать ее через каждый из моих элементов формы? – Aftab

+0

@Aftab Это только фильтр. Если вы так сортируете, вы не можете их назначить. Лучшим способом действий было бы отсортировать массив, используя '[] .sort()' перед этой строкой. У вас будет намного лучший контроль над этим. –

+0

Спасибо большое Akash .. Это, наконец, имеет смысл сейчас. Я могу запустить javascript изнутри в тегах EJS .. Это довольно аккуратно .. – Aftab

Смежные вопросы