【问题标题】:CoffeeScript not working on dropdown menus in Rails 4 applicationCoffeeScript 不适用于 Rails 4 应用程序中的下拉菜单
【发布时间】:2015-03-04 19:22:15
【问题描述】:

我正在构建一个 Rails 4 健身相关的应用程序来学习框架。我的重点是改善用户体验,但是我在尝试将一些 CoffeeScript 代码合并到我的应用程序中时遇到了问题。有问题的模型称为StrengthExercise,并有一个带有两个下拉菜单的表单。两个菜单都填充了来自其他两个模型/数据库表的内容:肌肉组和力量训练列表。力量训练模型包含以下声明:

belongs_to :muscle_group
belongs_to :strength_training_list

以下是新力量练习表格中的相关代码:

<div class="field">
  <%= f.label :muscle_group %><br />
  <%= f.collection_select :muscle_group_id, MuscleGroup.order(:name), :id, :name, include_blank: true %>
</div>

<div class="field">
  <%= f.label :strength_exercise %><br />
  <%= f.grouped_collection_select :strength_training_list_id, MuscleGroup.order(:name), :strength_training_lists, :name, :id, :name, include_blank: true %>
</div>

这两个下拉菜单包含我的数据库表中所需的数据。那不是问题。这就是我卡住的地方:当用户从第一个下拉菜单中选择一个肌肉群时,我希望该“事件”触发第二个下拉菜单的人口与相关的力量练习。完成此任务的数据在相应的表中可用,但它不起作用。

我已经研究了如何完成我想要的,并找到了一些有用的教程,包括 Ryan Bates 修订的第 88 集关于动态下拉菜单的内容。为了实现我的目标,我选择使用 CoffeeScript 仅仅是因为它已经内置到 Rails 4 中。我遵循了 Bates 的教程,但由于某种原因,我的 CoffeeScript 无法正常工作。这是来自strength_exercises.js.coffee 的脚本代码,它位于我的apps/javascript/ 目录中:

jQuery ->
  strength_training_lists = $('#strength_exercise_strength_training_list_id').html()
  console.log(strength_training_lists)
  $('#strength_exercise_muscle_group_id').change ->
  muscle_group = $('#strength_exercise_muscle_group_id :selected').text()
  options = $(strength_training_lists).filter("optgroup[label='#{Muscle group}']").html()
  console.log(options)
  if options
    $('#strength_exercise_strength_training_list_id').html(options)
  else
    $('#strength_exercise_strength_training_list_id').empty()

脚本似乎不会在更改事件上触发。在浏览器中,当我在第一个下拉菜单中选择一个肌肉群时,第二个下拉菜单中没有任何反应。第二个下拉菜单应该填充相关的力量练习,但它保持静态(不变)。数据可用于进行此操作,因此我怀疑我在实施中做错了什么。在浏览器中加载页面不会产生任何错误。我尝试使用 Firebug 对脚本进行故障排除。但是,我是编程新手,不知道如何使用该工具来解决问题。该脚本包含控制台日志操作,但我无法看到或理解出了什么问题。我正在接近实现我所寻求的用户体验,但确实需要一些帮助来解决 CoffeeScript 的问题。对于实现我想要的下拉菜单功能的任何帮助,我将不胜感激。谢谢!

【问题讨论】:

  • 你用#{Muscle group}嵌入了什么?您如何从服务器获取相关信息?此外,您的 Coffeescript 看起来一点也不像 RailsCast 注释中的 JS。
  • 谢谢尼克,我会查看 turbo-links 帖子。肌肉群是包含身体所有主要肌肉群的名称/ID 的表格。我正在学习所有这些......不知道如何使用“AJAX 调用”来做到这一点。你能更详细地解释一下我现在拥有的代码吗?
  • 抱歉,我删除了 turbolinks 评论。我错过了关于你的控制台日志显示的部分,所以它不是 turbolinks。在这里解释 AJAX 调用实在是太多了,但是网上有很多好文章。我只是不明白你是如何过滤第二个菜单的。
  • 尼克 - 我通过编写以下代码解决了这个问题:.filter("optgroup[label='#{muscle_group}']").html()
  • 有趣的是,我刚刚在您发表评论时发布了答案。随意接受,或自己发布答案并接受;)

标签: javascript jquery ruby-on-rails drop-down-menu coffeescript


【解决方案1】:

改变这个:

("optgroup[label='#{Muscle group}']")

到这里:

("optgroup[label='#{muscle_group}']")

【讨论】:

    猜你喜欢
    • 2014-11-25
    • 2021-06-20
    • 2021-08-16
    • 2023-03-10
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多