基于下拉选择在客户端使用 EJS 过滤猫鼬数据

Posted

技术标签:

【中文标题】基于下拉选择在客户端使用 EJS 过滤猫鼬数据【英文标题】:Filtering mongoose data on the clientside with EJS based on a dropdown selection 【发布时间】:2019-11-11 01:19:48 【问题描述】:

这里是我第一个项目的初学者。

我有 2 个 Mongoose 原理图和模型,其中包含 categoriesproducts。我将products 嵌套在categories 模型中。

使用 Node 和 Express,我将所有类别发送到我的页面。通过使用 EJS 和 for 循环,我可以创建一个包含所有类别名称的下拉(选择)列表。

现在我在尝试列出包含在所选类别中的所有产品时失败了。

我从尝试在 EJS 标记中过滤它,到组合外部脚本,再到发送带有所选数据的 AJAX POST 请求。没有任何效果。

The schemas

const productSchema = new mongoose.Schema (
    image: String,
    name: type: String, required: true,
    description: type: String, required: true,
    category: type: String, required: true,
    price: type: Number, required: true
);

const categorySchema = new mongoose.Schema (
    name: type: String, required: true,
    products: [
        type: mongoose.Schema.Types.ObjectId,
        ref: "Product"
    ]
);

The route 

app.get("/proposals/create", (req, res) => 
    Category.find().populate("products").exec((err, cats) => 
        if(err) 
            console.log(err);
         else 
            res.render("createproposal", cats: cats);
             
    );
);

The loop

<select id="catDropdown" class="ui fluid dropdown">
   <option value="">Category</option>
      <% for(i = 0; i < cats.length; i++)  %>
        <option><%= cats[i].name %></option>  
      <% ; %>
</select>

【问题讨论】:

是否要根据所选类别创建新的下拉列表?你想要多级下拉菜单吗?提供一些信息 感谢您的回复。我想要一个显示嵌套在所选类别中的产品的第二个下拉菜单。 【参考方案1】:

我建议你使用 optgroup,只是为了让你的代码简单并且你的数据集中。

<select id="catDropdown" class="ui fluid dropdown">
   <option value="">Category</option>
   <% cats.forEach(category =>  %>
   <optgroup label="<%= category.name %>" >
       <% category.products.forEach(product =>  %>
           <option> <%= product.name %> </option>
       <% ); %>
   </optgroup>
   <% ); %>
</select>

【讨论】:

感谢您的建议。但这个名单会越来越大。最后我可能需要更多的下拉菜单。我只是不确定如何根据我选择的类别过滤产品。

以上是关于基于下拉选择在客户端使用 EJS 过滤猫鼬数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用猫鼬和EJS实现分页并在分页时保留搜索查询?

如何将数据从猫鼬模型显示/渲染到 ejs 文件

在 ejs 页面上显示猫鼬对象

润乾报表自定义下拉日历

如何使用基于 JSON 的下拉菜单来过滤 xml 源?

基于下拉列表的表格过滤器