EJS排序过滤器不起作用

时间:2015-01-29 04:34:10

标签: node.js ejs

真的很感激能帮助我保存我的头发。我使用node.js + express + mongoDB + EJS构建基本的CRUD应用程序。我得说,EJS有可怕的文档,让我们的新手很难学习它。这就是我遇到的问题。

我有一个名为" vehicle"并且我在表单选择元素中显示它。这是我的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>
<% }); %> 

但它引发了以下错误:

对象原型可能只是一个Object或null

所以我觉得我的代码出了问题。我用另一个过滤器(downcase)修改它并像这样使用它:

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

它有效。角色是小孩子。那么为什么排序过滤器不起作用?

P / S:还有我的另一头发......

1 个答案:

答案 0 :(得分:1)

排序过滤器将数组作为输入,而不是字符串。以下内容可行:

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

虽然它可能不会产生您正在寻找的相同结果。在这种情况下,你需要在交出js之前进行排序。如果车辆的数据集非常大,我建议在mongodb查询中对其进行排序。

希望它有所帮助。