【问题标题】:Updating dependent form content using AJAX...passing form variable使用 AJAX 更新相关表单内容...传递表单变量
【发布时间】:2013-10-27 00:40:42
【问题描述】:

如何将表单变量传递给仅由 AJAX 用于将动态数据加载到表单部分的模板?

我有一个课程表属于_一堂课,而一堂课有_许多可分级项目。如果更改了课程选择输入... gradable_items 的嵌套字段必须更新以反映所选课程。

  jQuery ->
    l = $("#course_lesson_id")
    l.on "change", ->
      $("#gradable_items_container").load("gradable_items_inputs?lesson=#{l.val()}")

上述脚本有效。它将 gradable_items_inputs.html.erb 中的代码加载到目标 div 中。

gradable_items_inputs.html.erb

GradedItem 是存储每个 GradableItem 成绩的模型。一个 GradedItem belongs_to :gradable_item 和 belongs_to 课程。

  <%= f.simple_fields_for :graded_items do |graded_item| %>
    <%= gradable_item.name %>
    <%= graded_item.input :gradable_item_id, input_html: { value: gradable_item.id } %>
  <% end %>

当我将上述代码放入 gradable_items_inputs.html.erb 文件时,出现“未定义的局部变量“f””错误。我尝试将 f.simple_fields_for 调用移到 AJAX 模板文件之外……但是,我得到了同样的错误,但是对于 Graded_item 变量。一种或另一种方式,我需要通过 javascript 将该表单变量传递给模板。

这是我的代码外观的概述:

parent form do |f|
   f.association :lesson

  nested_form do |n|
    // the fields that go here are dependent on the lesson that is chosen above.  A model called  LessonGradableItem is a join model that holds what items a particular lesson should be graded against.  I generate an input for each item...then save the result in the GradedItem model.
    // since these inputs are loaded via AJAX from an external template, the form is being broken...how can I pass the n form variable to that file?
  end  

end

我尝试将表单变量作为数据参数和 url 参数传递,但它在 gradable_items_inputs.html.erb 文件中被解释为字符串。

【问题讨论】:

    标签: ruby-on-rails ajax json jquery


    【解决方案1】:

    不要传递表单变量。单独构造嵌套表格。因此,在您的操作中创建一个新的 Object.new,以便嵌套表单(在类似于我的情况下)不需要知道父表单对象。为了完成这项工作,我还必须设置 id: 和 name: 以便为输入提供正确的结构。

    【讨论】:

    • 上述的缺点是如果有错误,发送到表单的原始对象将不会是返回的对象。因此,如果表单被重定向并且页面重新加载......它不会有任何失败的数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 2013-10-22
    • 1970-01-01
    相关资源
    最近更新 更多