CoffeeScript 无法处理 Rails 4 应用程序中的下拉菜单
CoffeeScript not working on dropdown menus in Rails 4 application
我正在构建一个 Rails 4 健身相关应用程序来学习该框架。我的重点是改善用户体验,但我 运行 遇到了一个问题,试图将一些 CoffeeScript 代码合并到我的应用程序中。有问题的模型称为 StrengthExercise,并且有一个带有两个下拉菜单的表单。两个菜单都填充了另外两个 models/database 表中的内容:肌肉组和力量训练列表。力量练习模型包含以下声明:
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>
这两个下拉菜单包含我的数据库表中的所需数据。那不是问题。这就是我卡住的地方:当用户 select 从第一个下拉菜单中选择一个肌肉群时,我希望 "event" 触发第二个下拉菜单的相关力量练习。完成此任务的数据在相应的表中可用,但它不起作用。
我研究了如何实现我想要的,并找到了一些有用的教程,包括 Ryan Bates 修订的第 88 集动态下拉菜单。为了实现我的 objective,我选择使用 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()
脚本似乎没有触发更改事件。在浏览器中,当我在第一个下拉菜单中 select 肌肉群时,第二个下拉菜单中没有任何反应。第二个下拉菜单应该包含相关的力量练习,但它保持静态(不变)。数据可用于进行此操作,因此我怀疑我在实施过程中做错了什么。在浏览器中加载页面不会产生任何错误。我尝试使用 Firebug 对脚本进行故障排除。但是,我是编程新手,不知道如何使用该工具来解决问题。该脚本包含控制台日志操作,但我无法看到或理解出了什么问题。我即将实现我所寻求的用户体验,但确实需要一些帮助来解决 CoffeeScript 问题。对于实现我想要的下拉菜单功能的任何帮助,我将不胜感激。谢谢!
改变这个:
("optgroup[label='#{Muscle group}']")
对此:
("optgroup[label='#{muscle_group}']")
我正在构建一个 Rails 4 健身相关应用程序来学习该框架。我的重点是改善用户体验,但我 运行 遇到了一个问题,试图将一些 CoffeeScript 代码合并到我的应用程序中。有问题的模型称为 StrengthExercise,并且有一个带有两个下拉菜单的表单。两个菜单都填充了另外两个 models/database 表中的内容:肌肉组和力量训练列表。力量练习模型包含以下声明:
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>
这两个下拉菜单包含我的数据库表中的所需数据。那不是问题。这就是我卡住的地方:当用户 select 从第一个下拉菜单中选择一个肌肉群时,我希望 "event" 触发第二个下拉菜单的相关力量练习。完成此任务的数据在相应的表中可用,但它不起作用。
我研究了如何实现我想要的,并找到了一些有用的教程,包括 Ryan Bates 修订的第 88 集动态下拉菜单。为了实现我的 objective,我选择使用 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()
脚本似乎没有触发更改事件。在浏览器中,当我在第一个下拉菜单中 select 肌肉群时,第二个下拉菜单中没有任何反应。第二个下拉菜单应该包含相关的力量练习,但它保持静态(不变)。数据可用于进行此操作,因此我怀疑我在实施过程中做错了什么。在浏览器中加载页面不会产生任何错误。我尝试使用 Firebug 对脚本进行故障排除。但是,我是编程新手,不知道如何使用该工具来解决问题。该脚本包含控制台日志操作,但我无法看到或理解出了什么问题。我即将实现我所寻求的用户体验,但确实需要一些帮助来解决 CoffeeScript 问题。对于实现我想要的下拉菜单功能的任何帮助,我将不胜感激。谢谢!
改变这个:
("optgroup[label='#{Muscle group}']")
对此:
("optgroup[label='#{muscle_group}']")