【问题标题】:Dynamic Dropdown in Node.jsNode.js 中的动态下拉菜单
【发布时间】:2014-10-06 14:18:00
【问题描述】:

这里是 Node.js 的新手:

在 node.js 中制作动态下拉菜单的简单方法是什么?

基本上,我有两个表:SkillSkill_Category

我想从Skill_Category 中进行选择,并显示相关联的Skill

我假设我需要使用一些模板引擎(在网页中呈现)。

我尝试在 google 上进行大量研究,但没有找到任何对我有帮助的东西。

如果有人能指出我正确的方向吗?

谢谢!

【问题讨论】:

  • 您可以使用任何下拉库来运行客户端,您为什么希望它由您的模板引擎创建? “动态”下拉菜单到底是什么意思?
  • 所以,让我澄清一下:它不需要由模板引擎创建。通过“动态下拉菜单”,我说的是“动态”,因为 [Skill_Category] ​​中的第一个选择下拉菜单将决定 [Skill] 下拉菜单中显示的内容 - 这有意义吗?
  • 谢谢,让我考虑一下,我会草拟一个答案
  • 您是否打算使用任何前端库,例如 jquery 或 angular?
  • 很可能,我最终会尝试构建类似imgur.com/8lDPb1N的准系统版本

标签: node.js drop-down-menu template-engine


【解决方案1】:

所以一个下拉菜单会导致另一个下拉菜单显示。除非第二个下拉菜单有数百个选项,否则您不会希望发出单独的服务器端请求来获取它。这意味着您的逻辑应该都在浏览器/客户端中。

这意味着您希望您的“Skill_Category”选择框调用一个 JS 函数来隐藏当前的“Skill”选择框并显示新选择的“Skill”选择框。它们都将由您的模板以 html 呈现,但只会显示一个 (display:block),而其他则隐藏 (display:none)。

示例 HTML:

 <select id="skill_category">
   <option value="communication">Communication</option>
   <option value="teamwork">Team Work</option>
   <option value="technical">Technical</option>
 </select> 


   <select class="skill" id="communciation">
     <option value="1">One</option>
     <option value="2">Two</option>
     <option value="3">Three</option>
   </select> 
   <select  class="skill" id="teamwork">
     <option value="1">One</option>
     <option value="2">Two</option>
     <option value="3">Three</option>
   </select> 
   <select  class="skill" id="technical">
     <option value="1">One</option>
     <option value="2">Two</option>
     <option value="3">Three</option>
   </select> 

示例 Jquery 代码:

$('#skill_category').on('change',function(){
  $('.skill').hide()
  $('#'+this.value).show()
});

更新:

如果您有大量用于辅助选择框的选项,那么您可以发出 ajax (HTTP GET) 请求,并以 JSON 格式从您的服务器返回下拉列表的 lsit。 您可能会遇到以下两种情况之一:所有技能都保存在静态 JSON 文件中,或者保存在数据库中。

您的节点代码如下所示:

app.get('/skill_category/:skill', function(req, res){
  //JSON file in the /public/skills directory
  res.sendFile(__dirname + '/public/skills/'+req.params.skill+".json");

  //or some database lookup followed by a json send:
  var skills = someDatabaseLookup();
  res.json(skills);
 });

HTML

 <select id="skill_category">
   <option value="communication">Communication</option>
   <option value="teamwork">Team Work</option>
   <option value="technical">Technical</option>
 </select> 
 <select id="skill">
 </select> 

jquery 现在是:

$('#skill_category').on('change',function(){
  $.get('skill_category/'+this.value,function(data){
     
     for(var j = 0; j < length; j++)
     {

       $('#skill').contents().remove();
       var newOption = $('<option/>');
       newOption.attr('text', data[j].text);
       newOption.attr('value', data[j].value);
       $('#skill').append(newOption);
     }
  });
});

请注意此代码未经测试,但应该可以工作

【讨论】:

  • 不过,我可能会拥有数百个 [技能],我怎样才能做到这一点更有活力,而不是一次加载全部并隐藏一些?
  • 这可能是最具动态性的功能,因为它的响应速度最快。您可以考虑使用 Angular 或 React 等框架实现单页应用程序,以进一步绑定您的数据
猜你喜欢
  • 2013-11-05
  • 1970-01-01
  • 2018-09-29
  • 2012-08-29
  • 2014-06-16
  • 1970-01-01
相关资源
最近更新 更多